C#打开一个文件

时间:2013-04-24 14:36:45

标签: c#

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

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

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

2 个答案:

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

这是最简单的方法。我认为你的代码看起来很好。通过将日志文件读入文本框,我没有看到问题。您可以尝试使用威胁同时进行....