我做了一个程序,分为一个 winform 的 exe, 还有一个 windows service 在后台作一些日志操作。
日志是利用 log4net 记录到文本文件里的。
现在我的 winform 里想做一个浏览日志的功能,但是我读取文件的时候,总是发生异常,说该文件被另一个进程占用(应该就是我的 service),因此无法访问。读取文件的地方代码如下:StringBuilder content = new StringBuilder();FileInfo fi = new FileInfo(filePath);
using (FileStream fs = fi.OpenRead())
{
byte[] b = new byte[1024];
Encoding encoding = Encoding.GetEncoding("GB2312"); while (fs.Read(b, 0, b.Length) > 0)
{
content.Append(encoding.GetString(b));
}
}
txtLog.Text = content.ToString();请问如何修改代码才能够保证读取成功而不会发生进程占用的冲突。谢谢!
日志是利用 log4net 记录到文本文件里的。
现在我的 winform 里想做一个浏览日志的功能,但是我读取文件的时候,总是发生异常,说该文件被另一个进程占用(应该就是我的 service),因此无法访问。读取文件的地方代码如下:StringBuilder content = new StringBuilder();FileInfo fi = new FileInfo(filePath);
using (FileStream fs = fi.OpenRead())
{
byte[] b = new byte[1024];
Encoding encoding = Encoding.GetEncoding("GB2312"); while (fs.Read(b, 0, b.Length) > 0)
{
content.Append(encoding.GetString(b));
}
}
txtLog.Text = content.ToString();请问如何修改代码才能够保证读取成功而不会发生进程占用的冲突。谢谢!
解决方案 »
- 如何在windowsform窗体应用程序中控制DOS命令的输入和执行并用button控制之
- 如何用C#制作其他语言也可以调用的DLL
- comboxbox控件,为其 selectedvalue赋值,如果combobox并不存在这个值,如何处理呢?
- 我经常在代码中看到如下内容#region Component Designer generated code 。。#endregion
- 请教客户端与服务端存读图象。
- 如何实现点击动态TreeView节点,打开TabPage?
- 自动生成文件夹和文件
- 请教各位c#中的Replace如何动态替换数据
- 一个很简单的问题
- 做个winform的填空题的自定义控件,能个思路或示例
- label1 边框颜色问题 高手请进 70分
- 请问:vs2005中文版中msdn是中文版的吗?
你用StreamReader读,读的时候设置成共享读试一下。
我想是因为你的windows service正在写日志,关联了那个日志文件,所以别的进程访问不了这个文件。
你用StreamReader读,读的时候设置成共享读试一下。
”
如可设成只读?
我的解决方法如下,也就是做一份copy,读取copy的那一份,这样就不会有读取的冲突了。
//创建该文件的目的在于File.Copy的使用,因为如果源文件正被酒店端读取,通过此方式可以防止被另一进程读取的错误
File.Copy(fullPath, tmp, true);//打开只读方式
fs = new FileStream(tmp, FileMode.Open, FileAccess.Read);
//使用StreamReader类来读取文件,页默认编码***
sr = new StreamReader(fs, System.Text.Encoding.Default);
//从数据流中读取每一行,直到文件的最后一行
sr.BaseStream.Seek(0, SeekOrigin.Begin);
//读取到字符串中
iisLog = sr.ReadToEnd();