使用后删除临时文件

Mat*_*eid 13 .net windows temporary-files

我需要在Windows Forms .NET 3.5应用程序中使用一些临时文件.这些文件在外部应用程序中打开,当然可以比我自己的程序运行更长的时间.

是否有任何最佳实践可以确保在任何时候清除这些临时文件,以避免用不再需要的"垃圾"文件填充用户的硬盘?或者甚至Windows类自动处理这种情况?

一个很好的例子是任何邮件客户端:当你在任何应用程序中打开附件时,它通常被写入一个打开的临时文件.有没有办法弄清楚这些文件如何管理清理?

使用谷歌向我展示了许多清理和调整工具来手动清理临时目录,但我不想强迫用户这样做.:-)

任何帮助表示赞赏.

马蒂亚斯

Dir*_*mar 28

在.NET中,您可以使用TempFileCollection该类来管理应用程序要清理的一组临时文件(请注意,它隐藏在CodeDom命名空间中).显然你不能删除任何不属于你自己的文件,因为这些文件可能仍然被另一个应用程序打开(删除它们可能会导致严重的问题).

  • 确实;-)不知道为什么这个课程如此隐蔽.如果不是偶然的你就找不到它...... (8认同)
  • 观察Outlook如何处理临时文件(用于预览和启动附件),他们将它们放在临时文件夹中,并在Outlook关闭时尝试删除它们.在实践中与`TempFileCollection`非常相似. (2认同)

Jus*_* R. 7

清理临时文件的责任应该在创建它们的应用程序上.这很容易.我使用的类看起来像这样:

public class TempFile : IDisposable
{
    public TempFile()
    { this.path = System.IO.Path.GetTempFileName(); }

    public void Dispose()
    { File.Delete(path); }

    private string path;
    public string Path { get { return path; } }
}
Run Code Online (Sandbox Code Playgroud)

如果您需要清理其他应用程序的临时文件,则需要一些与您通信的方式.它至少应该能够提供信号量.然而,这样做的复杂性要大于让原始应用程序处理自己的文件的复杂性.


Ken*_*ing 5

如果您尝试确定性地清除临时文件类型文件夹的内容,则可能会删除其他进程正在使用的文件.Windows操作系统提供的工具允许用户在卷的可用磁盘空间达到特定阈值时删除这些文件.

现在,如果您可以确定在使用不再需要的特定临时文件后,那么删除该特定文件没有任何缺点.