6

我正在读取一个由 3rd 方程序定期写入的文件。我使用下面的 FileStream 阅读:

using (FileStream fs = new FileStream(
                         FullPath,
                         FileMode.Open,
                         FileAccess.Read,
                         FileShare.ReadWrite))

但是,第 3 方程序正在写入文件,但正在使用FileShare.None

因此,当第 3 方程序尝试以独占访问权限打开文件但失败时,有时我会打开文件以供阅读。

我怎样才能阅读这个文件而不会给第 3 方程序造成问题?我不介意发布我的阅读以优先考虑另一个应用程序。有什么办法可以做到这一点?

4

3 回答 3

1

您要做的是监控流程创建通知,当您看到特定流程出现时,您会想要避开它。

IWbemServices::ExecNotificationQuery

以下是MSDN的一些额外细节。这里还有一个 CodeProject:Process Information and Notifications using WMI

于 2013-08-17T22:09:27.293 回答
1

如果此第 3 方进程(.exe、Windows 服务、Web 应用程序等)停止,您可以在发生这种情况时访问该文件,如果它永远不会停止或无法判断它何时运行,您可以复制此文件一打开服务器就存档。

这是否有效取决于您的应用程序和另一个应用程序的性质,以及您需要阅读此文件的频率。

于 2013-08-17T22:59:03.657 回答
1

虽然我没有使用它,但您是否尝试过使用System.IO.Filestream.Unlock方法来帮助您流式传输当前未被其他软件锁定的文件部分?我只是假设其他软件没有锁定整个文件。

于 2014-01-04T23:33:21.560 回答