writeline()导致空文件
本文关键字:文件 writeline | 更新日期: 2023-09-27 17:49:14
我试图写几行,一次一个,到使用StreamWriter. txt文件。WriteLine(非静态)。
const string filename = "BasicTestInfo.txt";
using (var writer = new StreamWriter(filename, false))
{
writer.WriteLine("{0} 350 200 200 10 2 28 20 200 2500 1200 1 1", Player1);
writer.WriteLine("{0} 300 150 150 4 2 15 18 150 2500 1000 1 0", Player2);
writer.WriteLine("{0} 200 140 450 25 14 10 70 4500 2500 750 1 1", Player3);
writer.WriteLine("{0} 175 120 400 15 3 8 50 3000 2500 850 1 0", Player4);
writer.WriteLine("{0} 300 100 300 8 1 4 30 1000 2500 1200 1 0", Player5);
writer.WriteLine("{0} 450 310 450 20 5 5 35 1500 2500 700 1 1", Player6);
}
每个播放器对象都是字符串常量。如果我用不同的文件名(又名BasicTestInfo2.txt)运行它,它会在bin中创建该文件。调试,但它是空的。我知道我正在到达using块的内部(我放了一个Console。WriteLine在那里),我知道我想截断,这就是为什么我使用false为append(虽然用true或没有参数替换false并不能解决问题)。
基本问题是,即使创建了文件,文件中也没有文本行。
是的,在VB.net中,默认设置不需要这个(排他刷新),但在c#中,您需要一个Writer。强制写的Flush调用。当然,Writer.Close()也会强制刷新。或者,我们可以设置StreamWriter实例的AutoFlush属性:
sw.AutoFlush = true;
// Gets or sets a value indicating whether the StreamWriter
// will flush its buffer to the underlying stream after every
// call to StreamWriter.Write.
从http://msdn.microsoft.com/en-us/library/system.io.streamwriter.autoflush (v = vs.110) . aspx
注意:"using"结构会避免排他的同花顺,但是很多人只是基于这个问题的主题而在这里着陆,这是面对这个问题时最容易摘到的果实。
关闭写入器
writer.close ();
显示的代码看起来很好。
如果我不得不猜测,我怀疑有一个例外(可能来自Player
上的一个狡猾的ToString
实现),你正在某处吞咽。
逐步检查代码,看看当您遍历每个连续的WriteLine
时发生了什么,以及它是否一直走到using
块的末尾而没有错误。
我也有类似的问题。
我用这种方式修复了它,只需将您的字符串放入string . format ():
writer.WriteLine(String.Format("{0} 350 200 200 10 2 28 20 200 2500 1200 1 1", Player1));