Slo*_*nio 3 .net c# streamreader winforms
我的应用程序解析日志文件,但在尝试解析当天的文件时,我收到一条错误,指出该文件正由另一个进程使用.此日志文件当前正在写入,可以通过记事本访问,但不能通过我的应用程序访问.
现行代码:
Stream stream = new FileStream(fileToRead, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(stream);
Run Code Online (Sandbox Code Playgroud)
也试过这个,但没有运气:
Stream stream = new FileStream(fileToRead, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
Run Code Online (Sandbox Code Playgroud)
需要对我的代码进行哪些更改才能读取另一个进程正在使用的文件.由于日志的大小和应用程序的性能,复制日志文件不是解决方案
我们可以使用不同的签名来打开文件流,并具有对其他进程的读/写访问权限:
Stream stream = new FileStream(fileToRead, FileMode.Open, FileAccess.Read,
FileShare.ReadWrite);
Run Code Online (Sandbox Code Playgroud)
要么
Stream stream = File.Open(fileToRead, FileMode.Open, FileAccess.Read,
FileShare.ReadWrite);
Run Code Online (Sandbox Code Playgroud)
该文件共享选项决定何时进程打开同一文件的其他程序如何访问同一个文件.
您的第一个代码块将默认为FileShare.None:
Stream stream = new FileStream(fileToRead, FileMode.Open, FileAccess.Read);
Run Code Online (Sandbox Code Playgroud)
当文件打开时,这会失败,因为它试图获得对文件的独占访问权.
但是,您需要在日志编写器中进行此操作以允许您的日志阅读器具有读取权限.
最后,尝试以管理员身份运行您的日志阅读器,因为当您"使用记事本打开"时,可能存在正在运行的操作系统权限.