使用Path.GetTempFileName创建的文件是否会自动清除?

Ron*_*rby 22 .net temporary-files

我一直认为答案是肯定的,但现在我正试图找到真相.

当我使用创建临时文件时Path.GetTempFileName(),Windows会自动清除它吗?

如果我在下面创建一个目录Path.GetTempPath()呢?窗户会清理它吗?

或者开发人员有责任删除在那里创建的文件吗?

Dav*_*nan 11

不会自动删除它们.要创建一个在关闭时自动删除的文件,请传递FILE_FLAG_DELETE_ON_CLOSECreateFile.

在关闭所有句柄后立即删除该文件,其中包括指定的句柄和任何其他打开或重复的句柄.如果文件存在打开的句柄,则调用将失败,除非它们都是使用FILE_SHARE_DELETE共享模式打开的.除非指定了FILE_SHARE_DELETE共享模式,否则对文件的后续打开请求将失败.

要从.net访问此Win32功能,请使用SafeFileHandle该类.

  • `FILE_ATTRIBUTE_TEMPORARY` 也不会自动删除文件。该标志只是暗示操作系统尝试尽可能地将文件缓存在内存中,并可能放弃物理介质。您想要的标志是“FILE_FLAG_DELETE_ON_CLOSE”。 (2认同)

aru*_*ira 6

不,不会的。这就是为什么http://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename.aspx特别指出

“如果没有唯一的临时文件名可用,则 GetTempFileName 方法将引发 IOException。要解决此错误,请删除所有不需要的临时文件。”


小智 6

对于我的 Windows 窗体和 WPF 应用程序,我添加了一个事件以在应用程序关闭时删除文件。像这样:

private string GetTempFile() {
    string tmpfile = Path.GetTempFileName();
    this.Closed += (object sender, EventArgs e) => {
        if (File.Exists(tmpfile))
            File.Delete(tmpfile);
    };
    return tmpfile;
}
Run Code Online (Sandbox Code Playgroud)