使用语言:C#删除在关闭文件
理论: 我想创建一个临时文件夹的标志FileOptions.DeleteOnClose的文件。 该文件已成功创建并向其写入数据,下一步是启动与文件Process.Start(...)关联的应用程序并允许用户检查文档,最后关闭手柄并尽快当其他进程关闭临时文件的句柄时,该文件被操作系统删除。
我的问题是其他进程无法打开该文件,即使阅读,尽管如果我添加FileShare.ReadWrite | FileShare.Delete到共享模式。
有什么建议吗?
使用语言:C#删除在关闭文件
理论: 我想创建一个临时文件夹的标志FileOptions.DeleteOnClose的文件。 该文件已成功创建并向其写入数据,下一步是启动与文件Process.Start(...)关联的应用程序并允许用户检查文档,最后关闭手柄并尽快当其他进程关闭临时文件的句柄时,该文件被操作系统删除。
我的问题是其他进程无法打开该文件,即使阅读,尽管如果我添加FileShare.ReadWrite | FileShare.Delete到共享模式。
有什么建议吗?
的其他进程需要指定FileShare.Delete
,当他们打开DeleteOnClose
文件
从MSDN CreateFile文档:
“
FILE_FLAG_DELETE_ON_CLOSE
......随后打开该文件请求失败,除非FILE_SHARE_DELETE
共享模式被指定“。
切换到Linux SCNR
好了,现在认真:这是在Windows操作系统无法真正围绕工作中的缺陷。打开文件的每个程序必须同意其他程序在同一时间打开该文件。当我仍然使用Windows时,这是我多年以前遇到的一个问题。打开一个文件并说:让其他人也打开这个文件是不够的。其他人也必须说打开这个文件,即使它已经打开。
在Linux上,相反,操作系统不允许任何文件锁定Windows的方式。在这里,如果任何文件被多个程序同时使用,程序本身必须确保并发访问被锁定。另外,在Linux上,我们可以创建文件,确保其他进程已经启动并打开文件,然后删除文件(打开文件时)。文件名将立即从文件系统中删除,但该文件仍由文件系统驱动程序维护,直到最后一个链接(包括打开的文件句柄)被删除。
回到你的问题:由于这一切在Windows doen't工作,你可以做其他两种方法:
问候,博多
我想要创建一个带有标志的文件 FileOptions.DeleteOnClosed在 临时文件夹中。
我闭上我的把手,一旦其他 过程中关闭句柄 临时文件,该文件被 操作系统中删除。
请详细说明。这个文件如何被操作系统删除。如果你的意思是通过代码删除它。为什么不保存文件流。然后你可以用Process打开它。启动
它是Windows上的一个选项 - 最近在另一个SO问题中讨论过,我现在找不到它。 – 2009-02-13 14:35:14
检查:
你需要确保所有过程正在打开与FileShare.ReadWrite和FileShare.Delete文件。
即使创建者使用share-readwrite打开,如果第二个程序试图用share-read打开,第二个程序基本上是说没人能写。但是第一个程序已经拥有了这个能力,所以第二个程序就会失败
但是,创建者可以创建该文件,然后关闭它并使用共享只读重新打开该文件。最后,问题并不在于由两个进程同时打开该文件,而在于如何实现该自动删除。 – 2009-02-13 15:12:47
但是一般的Unix(不是Linux的某些特性,也可能是Linux)没有'delete when file finally finally'选项。 – 2009-02-13 14:35:54
这是因为即使打开它也可以删除它。只要每个需要它的人都有处理,事情就会解决。 – 2009-02-13 14:46:26