我为自己编写了一个小程序,用于读取相当大的日志文件(只是纯文本和数字)并将它们写在文本框中(记事本)。
我使用这种方法来读取文件,虽然它有诀窍但我想知道是否有某种方法可以优化它,并且当读取的当前文件在读取时被锁定而不被写入(因为它是日志文件)这是不断更新,这对我不好。)
private void ReadFile(string path)
{
using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (StreamReader reader = new StreamReader(file))
{
StringBuilder sb = new StringBuilder();
string r = reader.ReadLine();
while (r != null)
{
sb.Append(r);
sb.Append(Environment.NewLine);
r = reader.ReadLine();
}
textBox.Text = sb.ToString();
reader.Close();
}
}
答案 0 :(得分:1)
我在发布的问题here上找到了一些建议,您的代码已经确认了第一个建议,所以我尝试使用
File.OpenRead(path)
看看它是否适合你。
如果没有,那么显然写入文件的程序根本不允许你阅读它,只要它有一个句柄就可以了。您可能会注意到FileShare.ReadWrite
告诉系统其他程序可能对该文件执行了什么操作,编写日志的程序可能根本不允许您甚至读取该文件。
答案 1 :(得分:0)
试试这个:
using System;
using System.IO;
namespace csharp_station.howto
{
class TextFileReader
{
static void Main(string[] args)
{
// create reader & open file
Textreader tr = new StreamReader("date.txt");
// read a line of text
Console.WriteLine(tr.ReadLine());
// close the stream
tr.Close();
// create a writer and open the file
TextWriter tw = new StreamWriter("date.txt");
// write a line of text to the file
tw.WriteLine(DateTime.Now);
// close the stream
tw.Close();
}
}
}
这是最简单的方法。我认为你的代码看起来很好。通过将日志文件读入文本框,我没有看到问题。您可以尝试使用威胁同时进行....