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

自动删除临时文件(C#),c#,temp,C#,Temp,我有一个场景,我将文件从存储器下载到临时文件夹。然后我调用一个框架来处理该文件,这个框架在应用程序的生命周期中需要该文件。当应用程序退出时,我关闭所有文件,但当应用程序崩溃时,文件不会被删除。应用程序可以有多个实例 删除这些文件的最佳方法是什么?我有两个想法: 可以在下次运行应用程序时删除这些文件。我的想法是在临时路径中使用一个主文件夹,在临时路径中使用一个文件夹,其中文件夹的名称等于当前进程的进程id。下次运行应用程序时,我会检查所有文件夹,并检查是否有具有此id的进程正在运行。如果没有,我将

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

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

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



    编辑:已实施的解决方案#2,工作起来很有魅力。

    没有内置的方法自动删除临时文件。但是,您可以在重新启动时通过简单调用WinAPI函数来实现这一点,该函数指定标志值MOVEFILE\u DELAY\u UNTIL\u reboot-您的临时文件将在下次启动时消失(如果它仍然存在)。下面是两个从C#执行此操作的示例:和


    调用此函数的效果是将条目放入注册表中的
    HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
    项中(您可以直接输入该值,但这是首选方法)。如果在处理临时文件之前执行此操作,则在处理完临时文件后将其删除。如果您的进程崩溃,那么所有使用过的文件都将在注册表中有一个条目,如果这些文件在下次重新启动时已经存在,则不会发生任何事情(即没有引发错误或任何事情)

    没有自动删除临时文件的内置方法。但是,您可以在重新启动时通过简单调用WinAPI函数来实现这一点,该函数指定标志值MOVEFILE\u DELAY\u UNTIL\u reboot-您的临时文件将在下次启动时消失(如果它仍然存在)。下面是两个从C#执行此操作的示例:和


    调用此函数的效果是将条目放入注册表中的
    HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
    项中(您可以直接输入该值,但这是首选方法)。如果在处理临时文件之前执行此操作,则在处理完临时文件后将其删除。如果您的进程崩溃,那么所有使用过的文件都将在注册表中有一个条目,如果这些文件在下次重新启动时已经存在,则不会发生任何事情(即没有引发错误或任何事情)

    没有自动删除临时文件的内置方法。但是,您可以在重新启动时通过简单调用WinAPI函数来实现这一点,该函数指定标志值MOVEFILE\u DELAY\u UNTIL\u reboot-您的临时文件将在下次启动时消失(如果它仍然存在)。下面是两个从C#执行此操作的示例:和


    调用此函数的效果是将条目放入注册表中的
    HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
    项中(您可以直接输入该值,但这是首选方法)。如果在处理临时文件之前执行此操作,则在处理完临时文件后将其删除。如果您的进程崩溃,那么所有使用过的文件都将在注册表中有一个条目,如果这些文件在下次重新启动时已经存在,则不会发生任何事情(即没有引发错误或任何事情)

    没有自动删除临时文件的内置方法。但是,您可以在重新启动时通过简单调用WinAPI函数来实现这一点,该函数指定标志值MOVEFILE\u DELAY\u UNTIL\u reboot-您的临时文件将在下次启动时消失(如果它仍然存在)。下面是两个从C#执行此操作的示例:和

    调用此函数的效果是将条目放入注册表中的
    HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
    项中(您可以直接输入该值,但这是首选方法)。如果在处理临时文件之前执行此操作,则在处理完临时文件后将其删除。如果您的进程崩溃,那么所有使用过的文件都将在注册表中有一个条目,如果这些文件在下次重新启动时已经存在,则不会发生任何事情(即没有引发错误或任何事情)