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并不能解决问题)。

基本问题是,即使创建了文件,文件中也没有文本行。

writeline()导致空文件

是的,在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));