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

C# 无法使用C中的计时器写入文本文件#,c#,timer,filestream,streamwriter,C#,Timer,Filestream,Streamwriter,我仍然是C#的新手,我正在制作一个测试程序来编写日期时间。现在每秒钟。我试着用了这个,它成功了: StreamWriter sw = new StreamWriter("D:\Hello.txt", true); sw.WriteLine(DateTime.Now); sw.Close(); 然而,当我尝试包含一个文件流时,它不起作用。有什么问题吗?这是我的密码: FileStream fs = new FileStream(@"D:\Hello.txt", FileMode.OpenOrCr

我仍然是C#的新手,我正在制作一个测试程序来编写日期时间。现在每秒钟。我试着用了这个,它成功了:

StreamWriter sw = new StreamWriter("D:\Hello.txt", true);
sw.WriteLine(DateTime.Now);
sw.Close();
然而,当我尝试包含一个文件流时,它不起作用。有什么问题吗?这是我的密码:

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

    }
注意:我使用的是计时器,它每秒执行一次代码

更新: 我试着将代码(包含文件流的代码)放在一个按钮(带out定时器)中。每当我单击按钮时,它都会替换文本文件中的行。。这是一个将文本附加到文本文件的代码: StreamWriter sw=新的StreamWriter(“D:\Hello.txt”,true)


我将如何在文件流中执行它?我无法在FileStream中使用FileMode.Append,因为它要求文件访问权限为“仅写”。

您可能需要查看此处

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


尝试调用
StreamWriter.Flush()
,然后再调用
StreamWriter.Close()
是否可以尝试使用文件

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


要覆盖

由于每秒都在执行代码,因此每次都创建
FileStream
StreamWriter
对象不是一个好主意,因为有时文件将保持锁定状态,而FileStream将无法获取句柄

在编写单个文件时,最好在构造函数中初始化
FileStream
和后续
StreamWriter
,同时在类范围中将引用留给它们;然后在
sw.WriteLine(DateTime.Now)的线程上每秒调用一次应该有帮助


此外,千万不要错过文件流中的
try catch
。它们对找出差异有很大帮助。

您应该使用类似的东西,因为它对我很有用。如果它不适合你,你必须添加更多的细节

        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对象存储为字段? 因此,您不必每秒钟都创建它。(当您停止计时器时,请重新启动以进行处理)

应能正常工作:

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();
我已经解决了……)我只需要使用FileMode.Append、FileAccess.Write作为filestream中的参数。不执行FileMode.Append的原因是因为它需要FileAccess为只写。我认为将FileAccess切换为只写会阻止用户读取文件。我真蠢。。这是我的代码:

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();
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设置为仅在您仍然可以阅读的情况下写入?

“它不起作用”太模糊了,我们无法帮助您。请提供更多细节。哦,您应该使用
语句以更可靠的方式关闭资源。请提供异常详细信息,并确保文件未打开或未被其他进程使用。我认为这与计时器无关。你不认为使用Filemode.Append更好吗…只是一个建议。@pssk-我认为如果另一个进程正在使用它,它应该会显示错误,但我会再次检查。@Ravi-我尝试设置断点,它通过编写文本的代码,但仍然没有写入文本文件。你不认为这不是一个答案,只是一个注释吗?我必须使用FileStream,因为它有我需要的filemode、fileacces和fileshare。你确定吗,它真的会在一秒钟内关闭???抓拍记录异常的快照,你会了解更多。