在哪里以及如何下载临时文件?

3

假设我想从网络上运行一个exe文件,显然我更愿意将它下载到临时文件夹中……从那里运行它,并删除它(或让操作系统这样做)。有没有约定俗成的方法来做到这一点,同时确保不会遇到权限问题、覆盖现有文件等等?

谢谢。

编辑 我是指从桌面应用程序中运行。 顺便说一句,我有很多猜测,但我只是想知道什么是被接受的。

我知道我可以使用Path.GetTempFile,但这样它已经为我创建了文件,这让我想到它可能也会将它添加到某个数据库中,并跟踪它——所以我不能删除它并替换为我的文件。

我知道我也可以使用Path.TempDirectory(或类似的东西)和Path.RandomFileName,但后者会向文件名添加随机扩展名,而我需要exe,显然这也可以很容易地解决,但对我来说,重新编写似乎很奇怪,因为MS已经试图为我们编写了这些东西。


3
大多数情况下,网络浏览器不会允许您从Web运行可执行文件。而且,您绝对不希望让用户误以为从Web只是运行可执行文件是可以的。99.999%的用户将无法区分您的应用程序和其他任何应用程序,并且将仅记住一个结果:“如果出现要求运行应用程序的消息,请按“是”。这会导致立即失败。 - Sam Harwell
4个回答

3

我需要编写一个自更新的Windows服务,发现自己处于类似的境地,需要在执行之前将最新的安装程序下载到临时位置。关于这方面的最佳实践并没有太多信息,因此我依靠ASP.NET/C#提供的“工具”。

使用Path.GetTempPath()和下载的文件名构建下载文件的完整路径。以下是一些示例代码:

string url = "http://www.domain.com/install.exe";
string path = Path.GetTempPath();
string fileName = Path.GetFileName(url);
string tmpFile = Path.Combine(path, fileName);

我的结论是,我认为你使用System.IO.Path Temp*函数的猜测是一个合理的方法,尽管我找不到任何支持它的文档。


作为一个追求完美的人,我想知道如果临时文件夹中已经存在这样一个常见的名称会怎么样。 - Letterman
你应该努力保持文件名的唯一性。你可以使用Path.GetTempFileName()或Path.GetRandomFileName()来生成文件名。前者实际上生成一个带有.tmp扩展名的文件,你需要根据自己的需求进行更改。后者返回一个加密强度高、随机的字符串,可用作文件夹名称或文件名称。希望这能帮到你。 - Ben Griswold
是的,它会。虽然有点麻烦,但问题在于GetRandomFileName返回带有随机扩展名的文件名。我可以轻松删除点并添加EXE,这是唯一的选择吗? - Letterman
选择不多,但我建议使用Path.ChangeExtension()来更改扩展名,而不是自己编写逻辑。 - Ben Griswold

0

可信的小程序可以访问用户的文件系统,因此您可以选择这种方法。您正在寻求C#建议,但如果语言灵活,这也适用于Java世界。


0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接