自动删除临时文件(C#)

时间:2015-04-20 09:49:27

标签: c# temp

我有一个场景,我将文件从存储下载到临时文件夹。然后我调用一个框架来处理文件,这个框架在应用程序的生命周期中需要该文件。当应用程序退出时,我会关闭所有文件,但是当应用程序崩溃时,文件不会被删除。可以有多个应用程序实例。

删除这些文件的最佳方法是什么?我有两个想法:

  1. 可以在下次运行应用程序时删除文件。我的想法是在临时路径中使用一个主文件夹,在文件夹名称中使用一个文件夹,该文件夹的名称等于当前进程的进程ID。当我下次检查所有文件夹时运行应用程序,并检查是否有正在运行此ID的进程。如果不是,我删除该文件夹。此解决方案的问题是,它需要管理员权限才能运行Process.GetProcessById
  2. 我为每个进程创建一个文件夹并使用锁定文件。我保持一个用DeleteOnClose等于true打开的流。在下一次运行应用程序时,我会检查所有文件夹及其锁定文件。如果没有锁定文件或我可以删除它,我也删除该文件夹。
  3. 你还有其他想法吗?


    编辑:实施解决方案#2,就像魅力一样。

1 个答案:

答案 0 :(得分:3)

没有内置方法可以自动删除临时文件。但是你可以在重启时通过简单调用WinAPI函数MoveFileEx来指定标志值 MOVEFILE_DELAY_UNTIL_REBOOT - 你的临时文件将在下次启动时消失(如果它仍然存在)。以下是使用C#执行此操作的两个示例:12

调用此函数可以在注册表中输入HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations键(您可以直接输入该值,但这是执行此操作的首选方法)。如果在使用临时文件之前执行此操作,请在完成后删除临时文件。如果您的进程崩溃,那么所有已经使用过的文件已经在注册表中有一个条目,如果文件在下次重新启动时已经消失,则没有任何反应(即没有引发错误或任何错误)。