- 最近所做的一个项目中,需要实现一个读取日志文件的功能,开始我使用的读取日志文件的方法如下
- private void GetLogThread()
- {
- try
- {
- string filename = AppDomain.CurrentDomain.BaseDirectory + "log//" +cmblogfile.Text;
- using (StreamReader sr = new StreamReade(filename))
- {
- rtblog.Text = sr.ReadToEnd();
- sr.Close();
- }
- }
- catch (Exception err)
- {
- MessageBox.Show(err.Message, "错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
- }
- }
- 在读取历史日志文件时,没有问题,但是在读取当前正在写的日志文件时,就出现问题了。
出现以下错误:
文件“F:/AutoUpdater/log/logfile20090422.txt”正由另一进程使用,因此该进程无法访问该文件
logfile20090422.txt文件是系统中的日志文件,每天一个文件,不定时的会进行写入。
解决方案:
使用以下代码 -
- private void GetLogThread()
- {
- try
- { stringfilename=AppDomain.CurrentDomain.BaseDirectory+ "log//"+cmblogfile.Text;
- FileStream fs = new FileStream(filename,FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
- StreamReader sr = new StreamReader(fs,System.Text.Encoding.Default);
- rtblog.Text = sr.ReadToEnd();
- sr.Close();
- fs.Close();
- }
- catch (Exception err)
- {
- MessageBox.Show(err.Message, "错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
- }
- }
- 总结:
这样的情况,不单要与只读方式打开txt文件,而且,需要共享锁。还必须要选择flieShare方式为ReadWrite。因为随时有其他程序对其进行写操作。
-
C#读取被进程占用的文件
最新推荐文章于 2023-11-08 09:37:09 发布