0

我为自己编写了一个小程序,用于读取相当大的日志文件(只是纯文本和数字)并将它们写在文本框中(记事本)。

我使用这种方法来读取文件,虽然它可以解决问题,但我想知道是否有某种方法可以优化它,以及当前正在读取的文件是否在读取时被锁定而无法写入(因为它是不断存在的日志文件更新这对我不好)。

    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();
        }
    }
4

2 回答 2

1

我在这里发布的问题中找到了一些建议,您的代码已经确认第一个建议,所以我会尝试使用

File.OpenRead(path)

看看这是否适合你。

如果它没有,那么显然写入文件的程序根本不允许你读取它,只要它有一个句柄。您可能会注意到FileShare.ReadWrite它告诉系统其他程序可以对该文件做什么,正在写入日志的程序可能根本不允许您读取该文件。

于 2013-04-24T14:40:39.170 回答
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();
        }
    }
}

这将是最简单的方法。而且我认为您的代码对我来说看起来不错。通过将日志文件读入文本框,我没有看到问题。您可以尝试通过使用威胁来同时执行此操作....

于 2013-04-24T14:40:22.293 回答