【问题标题】:Length of time temporary file kept?临时文件保存的时间长度?
【发布时间】:2011-03-10 16:08:13
【问题描述】:

我正在开发一个程序,它会生成一些临时文件,等待用户输入一些内容,然后使用这些临时文件进行操作。

我想知道我是否可以可靠地期望这些临时文件在我完全处理完它们之前不会消失(例如,它们会在用户工作时消失吗?)。

显然,我可以在我的 appdata 中创建自己的文件夹并将其用于临时文件。但是使用 C# 的Path.GetTempFileName() 或Path.GetTempPath() + somename 会更容易。以这种方式创建的文件何时会被删除?

为了澄清,我不是在寻找如何创建临时文件,而是在GetTempPath() 中创建的临时文件保留多长时间,以及在使用它们之前是否足够长以等待用户输入。

【问题讨论】:

  • 临时路径是否被删除了?我的包含几个月前的文件,与此 Windows 安装一样古老...
  • 那是我不确定的。请参阅我对蒂姆回答的评论,了解为什么我对假设除非我得到具体答案持谨慎态度......
  • 从 Windows 10 和 Storage Sense 开始,不再保证:stackoverflow.com/a/63848110/67824

标签: c# .net file temporary-files


【解决方案1】:

我不知道 Windows 中有任何自动删除临时文件的进程。用户可能设置了清理作业,但您可以合理地期望您的文件至少保留一两天。

作为比较,当您在 Outlook 中打开附件时,它会将附件复制到临时文件并启动关联的应用程序。如果用户从不关闭关联的应用程序,这些临时附件文件可能需要无限期保留。

【讨论】:

  • 好吧,可以合理地假设任何自动删除临时文件的东西都不会/无法删除当前打开的文件(如您的示例中);但是,当用户工作时,我的文件不会被应用程序打开。我问这个问题是因为我遇到过打开一些临时文件(类似于你的 Outlook 示例)然后关闭它的情况,然后如果我尝试再次打开同一个临时文件——在关闭它几秒钟后——它就消失了。这可能是因为生成应用程序正在删除它们,但我只是想确保没有其他东西。
  • 作为说明,我接受了您的回答,但我实际上并没有保存到程序中的临时目录,因为我忘记了另一种可能会将文件留在那里数天或数周的模式,或者无论用户想要多长时间,在处理它们之前 - 所以我认为我自己的缓存文件夹在这种情况下是一个更好的选择。但我仍然找不到任何说明临时文件已自动删除的信息,所以我认为这可能是该程序只是一个适当的软件公民并自行清理(Outlook 可能应该这样做!)
【解决方案2】:

这是完全安全的,你的直觉是 100% 正确的——这是处理临时文件的方法,只要你记得事后清理它们。

调用GetTempPath() 只会将您指向一个安全的地方来放置临时文件。这相当于获取环境变量PATH 的值。该目录从不自动清除——您经常会发现它充满了古老的垃圾。

【讨论】:

  • 我是这么想的;我只是想确保它不会在我脸上爆炸。谢谢。
【解决方案3】:

它不会自行清理。

使用Windows Disk Cleanup 执行此操作。

【讨论】:

  • 太棒了!只要用户不在我的程序中间运行它,它就应该全部设置好。
  • 尝试启动一堆应用程序并在它们运行时删除您的临时目录。记下哪些崩溃。
  • 锁定您的文件,否则它们将不会被清除。
【解决方案4】:

据我所知,临时文件会一直存在,直到您以编程方式删除它们,或者用户清理它们(例如使用磁盘清理实用程序或手动删除它们)。

使用临时文件时,我总是保留创建的文件名,并在完成后尝试删除该文件,否则我注意到我在很长一段时间内在临时目录中累积了大量临时文件.

【讨论】:

  • 好的,谢谢。不幸的是,保持文件打开不是这个程序的选项。
  • 啊,您在我编辑那段内容时发表了评论,重新阅读了您的问题:)
【解决方案5】:

同意蒂姆。至少在 XP 中,清理临时文件夹中的文件的责任在于将它们放在第一位的程序。 即使使用较新的操作系统,如 Vista / 7,我认为 %TMP% 文件夹不会发生任何 Windows 自动清理。

【讨论】:

    猜你喜欢
    • 2012-06-28
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多