C# StreamWriter.WriteLine()不工作

C# StreamWriter.WriteLine()不工作,c#,file-io,text-files,vs-unit-testing-framework,C#,File Io,Text Files,Vs Unit Testing Framework,我正在尝试使用StreamWriter.WriteLine(不是静态地)将几行代码写入.txt文件,一次一行 每个播放器对象都是字符串余弦。如果我使用不同的文件名(a.k.a.BasicTestInfo.txt)运行它,它会在bin.Debug中创建该文件,但它是空的。我知道我正在到达using块的内部(我在那里放了一个Console.WriteLine),我知道我想要截断它,这就是为什么我使用false作为append(尽管用true或无参数替换false并不能解决问题) 基本问题是,即使创建

我正在尝试使用StreamWriter.WriteLine(不是静态地)将几行代码写入.txt文件,一次一行

每个播放器对象都是字符串余弦。如果我使用不同的文件名(a.k.a.BasicTestInfo.txt)运行它,它会在bin.Debug中创建该文件,但它是空的。我知道我正在到达using块的内部(我在那里放了一个Console.WriteLine),我知道我想要截断它,这就是为什么我使用false作为append(尽管用true或无参数替换false并不能解决问题)


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

显示的代码看起来不错

如果非要我猜的话,我会怀疑有一个例外(可能是因为
播放器
上的一个狡猾的
ToString
实现),你正在吞咽某个地方

逐步浏览代码,查看在浏览每个连续的
写入线时发生的情况,以及它是否使用
块一直到
的末尾而没有错误。

关闭写入器

writer.close()


这对我来说很有效。

是的,在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.
发件人:


请注意:“使用”结构将避免排他性同花顺,但许多人只是基于这个问题的主题而来到这里,这是面对这个问题时最容易解决的问题。

我也有类似的问题

我用这种方式修复了它,只需将字符串放入string.Format():


我已经将您的代码复制到了新的控制台应用程序中,并且运行良好。也许你以后会清理那个文件?使用文件的完整路径名。所以不是BasicTestInfo 2.txt,而是c:\foo\bar\BasicTestInfo 2.txt。这样可以确保您始终能够找到您希望的文件。别忘了使用Environment.GetFolderPath()获取可靠的文件夹名称以进行写入。以前的调试会话是否仍对该文件有打开的锁定?您可能需要添加一个writer.Flish()在使用块结束时,确保流的内容确实写入文件。@Mithrandir我相信使用块会使Flush()函数变得不必要,因为当流关闭时,流会被刷新。但是,我尝试将writer.Flush()添加到块的末尾,但没有解决问题。感谢所有帮助!我发现了我的问题。因为我想在每次写入文件时覆盖它,而不是附加它,所以我使用FileMode.Truncate构建文件流(在我切换到直接使用StreamWriter构造函数之前)。正因为如此,我才使用Truncate构建的StreamReader访问该文件。因此,当我打开文件阅读时,我正在删除所有文件。将其替换为FileMode.OpenOrCreate后,文件在打开时不会中断,测试通过。因此,我们发现问题不在于写作,而在于阅读。使用
将关闭编写器。如果没有使用
将它放在
中,则只需显式执行此操作。这是正确的,但没有解决问题;
StreamWriter
中的
Dispose()
方法将调用
Flush()
,上面的代码将使用
块在
结尾处处置writer。此答案一定不正确。处理写入程序将刷新所有内容。设置MyStreamWriter.AutoFlush=true为我做了这件事。
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.
writer.WriteLine(String.Format("{0} 350 200 200 10 2 28 20 200 2500 1200 1 1", Player1));