无法使用C#中的计时器写入文本文件

时间:2012-08-23 06:04:08

标签: c# timer filestream streamwriter

我仍然是C#的新手,我正在制作一个每秒写入DateTime.Now的测试程序。我尝试使用它并且有效:

StreamWriter sw = new StreamWriter("D:\Hello.txt", true);
sw.WriteLine(DateTime.Now);
sw.Close();

但是,当我尝试包含FileStream时,它无效。什么似乎是问题?这是我的代码:

FileStream fs = new FileStream(@"D:\Hello.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(DateTime.Now);
sw.Close();
fs.Close();

注意:我正在使用计时器,它每秒执行一次代码..

更新: 我尝试将代码(具有文件流的代码)放在一个按钮(w / out计时器)中。每当我单击按钮时,它只是替换文本文件中的行。这是一个将文本附加到文本文件的代码:     StreamWriter sw = new StreamWriter(“D:\ Hello.txt”,true);

我将如何在文件流中执行此操作?我无法在FileStream中使用FileMode.Append,因为它要求= s将FileAccess设置为只写。

7 个答案:

答案 0 :(得分:1)

由于您每秒都在执行代码,因此每次创建FileStreamStreamWriter对象都不是一个好主意,因为有时文件将保持锁定状态并且文件流将无法获取处理

在写入单个文件时,可以在构造函数中初始化FileStream和后续StreamWriter,同时在类范围内保留对它们的引用;然后在{}的线程上每隔一次调用它{1}}应该有帮助。

并且永远不会错过文件流中的sw.WriteLine(DateTime.Now);。他们帮助找出差异。

答案 1 :(得分:0)

尝试在StreamWriter.Flush()之前调用StreamWriter.Close()

答案 2 :(得分:0)

可以尝试使用File吗?

File.AppendAllText(@"D:\Hello.txt", DateTime.Now.ToString());

File.WriteAllText(@"D:\Hello.txt", DateTime.Now.ToString());

覆盖

答案 3 :(得分:0)

你应该使用这样的东西,因为它对我来说很好。如果它不适合您,则必须添加更多详细信息

        using (var fs = new FileStream("path", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
        {
            fs.Seek(0, SeekOrigin.End);
            using (StreamWriter sw = new StreamWriter(fs) { AutoFlush = true })
            {
                sw.WriteLine("my text");
            }
        }

但请记住,我不会每秒都创造它。当您调用Timer.Start时,为什么不将Streamwriter对象存储为字段? 所以你不必每秒都创建它。 (当你停止计时器时,请记住处理它)

答案 4 :(得分:0)

应该工作:

FileStream fs = new FileStream(@"D:\Hello.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(DateTime.Now);
sw.Flush();
sw.Close();
fs.Close();

答案 5 :(得分:0)

我已经解决了.. :)我只需要使用FileMode.Append,FileAccess.Write作为文件流中的参数。之前没有做FileMode.Append的原因是因为它需要FileAccess只能写入。我认为将FileAcess切换为Write只会阻止用户读取文件。我这么傻..这是我的代码:

private void timer1_Tick(object sender, EventArgs e)
    {

        FileStream fs = new FileStream(@"D:\Hello.txt", FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
        StreamWriter sw = new StreamWriter(fs);
        sw.WriteLine(DateTime.Now);
        lbTimer.Items.Add(DateTime.Now);
        sw.Close();
        fs.Close();

    }

最后一个问题,什么是将FileAccess设置为只写仍然可以读取它?

答案 6 :(得分:-1)

你可能想看看这里

如何:写入文本文件(C#编程指南)

http://msdn.microsoft.com/en-us/library/8bh11f1k.aspx