我仍然是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设置为只写。
答案 0 :(得分:1)
由于您每秒都在执行代码,因此每次创建FileStream
和StreamWriter
对象都不是一个好主意,因为有时文件将保持锁定状态并且文件流将无法获取处理
在写入单个文件时,可以在构造函数中初始化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)