10

我正在尝试使用 StreamWriter.WriteLine (非静态)一次将几行写入 .txt 文件。

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.Debug 中创建该文件,但它是空的。我知道我到达了 using 块的内部(我在那里放了一个 Console.WriteLine),并且我知道我想截断这就是为什么我使用 false 进行追加(尽管用 true 或没有参数替换 false根本不能解决问题)。

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

4

4 回答 4

12

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

请注意:“使用”构造将避免排他同花,但是很多人只是基于这个问题的主题登陆这里,这是面对这个问题时最容易实现的目标。

于 2014-03-21T03:47:32.287 回答
6

关闭作者

writer.close();

这对我有用。

于 2013-06-21T14:22:05.110 回答
3

显示的代码看起来不错。

如果我不得不猜测,我会怀疑您正在某个地方吞下一个异常(可能来自一个狡猾的ToString实现)。Player

单步执行代码以查看当您遍历每个连续的 时会发生什么WriteLine,以及它是否一直到using块的末尾而没有错误。

于 2012-12-23T09:40:44.977 回答
-1

我有类似的问题。

我以这种方式修复了它,只需将您的字符串放入 String.Format():

writer.WriteLine(String.Format("{0} 350 200 200 10 2 28 20 200 2500 1200 1 1", Player1));
于 2016-01-25T13:27:58.560 回答