.net 使用Path.GetTempFileName创建的文件是否会自动清理?
我一直认为答案是肯定的,但现在我正在努力寻找真相 当我使用.net 使用Path.GetTempFileName创建的文件是否会自动清理?,.net,temporary-files,.net,Temporary Files,我一直认为答案是肯定的,但现在我正在努力寻找真相 当我使用Path.GetTempFileName()创建临时文件时,windows会在以后自动清理该文件吗 如果我在Path.GetTempPath()下创建一个目录,会怎么样?windows会清理它吗 或者删除在那里创建的文件是开发人员的责任吗?否。不会。这就是为什么特别声明 “如果没有唯一的,GetTempFileName方法将引发IOException 临时文件名可用。若要解决此错误,请删除所有 不需要的临时文件。” 不,它们不会自动删除。
Path.GetTempFileName()
创建临时文件时,windows会在以后自动清理该文件吗
如果我在Path.GetTempPath()
下创建一个目录,会怎么样?windows会清理它吗
或者删除在那里创建的文件是开发人员的责任吗?否。不会。这就是为什么特别声明 “如果没有唯一的,GetTempFileName方法将引发IOException 临时文件名可用。若要解决此错误,请删除所有 不需要的临时文件。”
不,它们不会自动删除。要创建一个在关闭时自动删除的文件,请将
file\u FLAG\u DELETE\u ON\u CLOSE
传递给
关闭所有句柄(包括指定的句柄和任何其他打开或复制的句柄)后,将立即删除该文件。
如果存在文件的现有打开句柄,则调用将失败,除非它们都是使用文件共享\u删除共享模式打开的。
文件的后续打开请求失败,除非指定了文件共享\u删除共享模式
为了从.net访问此Win32功能,请使用该类。对于我的Windows窗体和WPF应用程序,我添加了一个事件以在应用程序关闭时删除该文件。像这样:
private string GetTempFile() {
string tmpfile = Path.GetTempFileName();
this.Closed += (object sender, EventArgs e) => {
if (File.Exists(tmpfile))
File.Delete(tmpfile);
};
return tmpfile;
}
这种方法对我很有效。跟踪打开的程序何时关闭,然后尝试删除该文件
//Open it now and cleanup when program closes
Process p = Process.Start(path);
p.EnableRaisingEvents = true;
p.Exited += (sender, e) =>
{
try
{
File.Delete(path);
}
catch { } //Suppress errors
};
这个问题的答案是否定的,在到达
tmpFFFF.tmp
并得到错误之前,您可能永远不会注意到。如果这是在Web服务器上,您的操作将失败
临时文件使用的路径名取决于上下文。因此,如果您遇到此错误,并且是紧急情况,您需要确保能够快速找到正确的tmp
文件夹
在Windows 8上作为控制台应用程序运行时,我会在本地PRPOP文件中找到一个路径:
C:\Users\sweaver\AppData\Local\Temp\2\tmp4193.tmp
在IIS中,对于我获得的AppPool,加载用户配置文件=True:
C:\Users\APPPOOL\u NAME\AppData\Local\Temp
当Load User Profile=False
时,我会得到一个更易于管理的:
C:\Windows\TEMP\tmp7C32.tmp
你想立刻清理你的临时文件来避免这种情况
FILE\u ATTRIBUTE\u TEMPORARY
也不会自动删除文件。该标志仅仅提示操作系统尽量将文件缓存在内存中,并可能放弃物理介质。你想要的标志是FILE\u flag\u DELETE\u ON\u CLOSE
@JesseC.Slicer你说得对,我的大脑冻结了。我现在改正了。谢谢。没问题,先生+1获取信息。无需为此使用P/Invoke,请使用接收并传入文件选项的。DeleteOnClose
。如果创建tmp文件并立即将其删除,请小心。有时病毒防护软件会跳入并尝试扫描它,然后阻止您删除它。从Windows 10和Storage Sense开始,它们可能会被系统删除:相关: