【发布时间】:2014-05-09 07:59:52
【问题描述】:
我的应用程序解析日志文件,但在尝试解析当天的文件时,我收到一条错误消息,指出该文件正被另一个进程使用。此日志文件当前正在写入,可以通过记事本访问,但不能通过我的应用程序访问。
当前代码:
Stream stream = new FileStream(fileToRead, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(stream);
也试过了,但没有运气:
Stream stream = new FileStream(fileToRead, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
需要对我的代码进行哪些更改才能读取另一个进程正在使用的文件。由于日志的大小和我的应用程序的性能,复制日志文件不是解决方案
【问题讨论】:
-
你有没有看过重载的构造函数,它接受一个 FileShare(一个确定文件将如何被进程共享的常量)
-
我试过了:Stream stream = new FileStream(fileToRead, FileMode.Open, FileAccess.Read, FileShare.Read);但没有运气
-
如果文件正被另一个进程写入,您需要指定(至少)
FileShare.Write。FileShare表示您对其他 用户对文件所做的事情感到高兴。当然,如果其他进程在打开文件时没有指定(相当于)FileShare.Read,这仍然会失败。 -
您说记事本可以正常打开文件,但您的代码不能。使用Process Monitor 检查您的代码和记事本打开文件的不同方式,并将该信息添加到您的问题中(如果不是,那么,如何修复您的代码以与记事本相同的方式运行对您来说很明显)
标签: c# .net winforms streamreader