语言的使用:C#

理论:我想要创建一个文件标志 FileOptions.DeleteOnClose 在一个临时文件夹。该文件是成功地创建和我写dato到,下一个步骤是启动申请相关的文件 Process.Start(...) 以及允许用户查阅该文件,最后我闭处理,并尽快为其他进程靠近所处理的临时文件,该文件被删除,通过操作系统。

我的问题是,其他进程无法打开文件,甚至对于阅读,尽管如果我加入 FileShare.ReadWrite | FileShare.Delete 共享模式。

任何建议?

有帮助吗?

解决方案

在其它过程需要时它们打开FileShare.Delete文件来指定DeleteOnClose

MSDN的CreateFile 文档:

  

FILE_FLAG_DELETE_ON_CLOSE ...该文件后续的打开请求失败,除非指定了FILE_SHARE_DELETE共享模式。”

其他提示

检查这样的:

您需要确保全部进程打开与FileShare.ReadWrite和FileShare.Delete文件。

即使创作者与共享读写打开,如果第二个程序试图与分享阅读,第二个程序基本上是说没有其他人可以写打开。但第一程序已经具有功率,从而所述第二打开失败。

切换到Linux scnr

好吧,说真的现在:这是一个缺陷,在Windows操作系统,该系统不能真正工作周围。每一个程序即将开的文件必须同意在其他程序具有打开文件,在同一时间。这是一个问题,我得到了许多年后,当我仍在使用Windows。它不足以打开文件,并说:让别人打开这个。其他人也必须说打开这个文件,即使它已经打开.

在Linux相反,操作系统不允许任何文件锁定的方式Windows并在所有。在这里,如果任何文件,用于通过多个程序的同时,程序本身必须确保,这个并发的访问获得锁。此外,在Linux上,我们可以创建文件,确保其他进程已经开始,并打开文件,然后只是删除文件(虽然它是开放)。该文件随后从中删除的文件系统immediatelly,但该文件仍然是维持通过的文件的系统驱动程序,直到最后一个链接(包括开放文件处理)得到了清除。

回到你的问题:作为所有这doen不工作的窗口,你可以做两种其他办法:

  1. 登记册要删除的文件在接下来的启动(在Win3x天,有一部分在取胜。ini。较新版本的Windows仍然支持,我只是不记得任何更长时间,它是如何做到现在)。
  2. 开始的其他工艺,等待它打开文件,关闭文件,然后再尝试的每一分钟删除该文件中删除,直到成功...

问候,波多

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top