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”正由另一进程使用,因此该进程无法访问该文件。