【发布时间】:2013-08-06 05:48:18
【问题描述】:
我正在读取一个第三方程序定期写入的文件。 我正在使用下面的 FileStream 阅读:
using (FileStream fs = new FileStream(
FullPath,
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite))
但是,第 3 方程序正在写入文件,但使用的是 FileShare.None
因此,当第 3 方程序尝试以独占访问权限打开文件但失败时,我偶尔会打开文件以供读取。
我怎样才能在不给第 3 方程序造成问题的情况下读取此文件? 我不介意发布我的阅读以优先考虑另一个应用程序。有什么办法吗?
【问题讨论】:
-
您是否尝试将其复制到临时位置并从那里读取?通常,我所做的是创建一个函数,该函数尝试读取文件,如果它正在使用它返回 false,但如果不返回 true,那么我尝试将文件复制并移动到我可以使用它的位置。使用生产文件可能存在潜在危险,尤其是在混合使用 2 个进程的情况下。
-
File.Copy 只是在后台执行 FileStream。问题不在于我尝试阅读并将其锁定时。当我可以访问该文件并且第 3 方程序尝试获得独占访问但由于我打开它而无法访问时。
-
如果您将文件复制到一个临时位置并让您的程序使用该临时文件,这样原始文件就不会被使用,因此仍然可以被第 3 方程序毫无问题地访问怎么办? .如果这是有道理的:D
-
“复制”功能只是打开文件,读取文件并将其写入新位置。本质上导致了同样的问题。
-
好吧,鉴于他们写入文件的方式,我不确定您是否能够消除此问题。如果您无法消除问题,那么最好的办法就是尽可能减少其发生的机会。
标签: c# .net filestream ioexception read-write