c# 读取其他程序正打开的文件的时“正由另一进程使用,因此该进程无法访问该文件。"的问题解决方法

c# 读取其他程序正打开的文件的时“正由另一进程使用,因此该进程无法访问该文件。"的问题解决

csharp

问题

在C#中,使用log4net输出日志到文本文件中,然后使用StreamReader打开该文件用于查看,但是由于log4net在实际占用中,在打开的时候就会抛出异常"正由另一进程使用,因此该进程无法访问该文件。"

StreamReader打开文件所用代码:

?
1
2
3
StreamReader reader = new StreamReader( "d:\debug.txt" );
  
String text = reader.ReadToEnd();

解决办法

FileStream fs = new FileStream(Path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);

注意看上面的FileShare,作用是确定文件如何由进程共享。

可选成员参数:


成员名称 说明
Delete 允许随后删除文件。 
Inheritable 使文件句柄可由子进程继承。Win32 不直接支持此功能。 
None 谢绝共享当前文件。文件关闭前,打开该文件的任何请求(由此进程或另一进程发出的请求)都将失败。 
Read 允许随后打开文件读取。如果未指定此标志,则文件关闭前,任何打开该文件以进行读取的请求(由此进程或另一进程发出的请求)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。 
ReadWrite 允许随后打开文件读取或写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行读取或写入的请求(由此进程或另一进程发出)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。 
Write 允许随后打开文件写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行写入的请求(由此进程或另一进过程发出的请求)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。 

其他错误举例1

FileStream fs = File.OpenRead(path);

StreamReader sr = new StreamReader((System.IO.Stream)fs, System.Text.Encoding.Default);

错误提示:文件“D:\Log\Cargoabc\logfilecargoabc.txt”正由另一进程使用,因此该进程无法访问该文件。


其他错误举例2

StreamReader sr = File.OpenText(url);

错误提示:错误提示:文件“D:\Log\Cargoabc\logfilecargoabc.txt”正由另一进程使用,因此该进程无法访问该文件。

文章地址: http://www.daojia100.com/jingyan/info/512ef5422e05e81ca83e051e.aspx

你可能感兴趣的:(c# 读取其他程序正打开的文件的时“正由另一进程使用,因此该进程无法访问该文件。"的问题解决方法)