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”正由另一进程使用,因此该进程无法访问该文件。
本文解决在C#中使用log4net输出日志到文本文件后,通过StreamReader读取文件时出现正由另一进程使用的异常问题。提供了通过FileStream设置FileShare参数来解决该问题的方法。
1126

被折叠的 条评论
为什么被折叠?



