C# StreamWriter.WriteLine()不工作
我正在尝试使用StreamWriter.WriteLine(不是静态地)将几行代码写入.txt文件,一次一行 每个播放器对象都是字符串余弦。如果我使用不同的文件名(a.k.a.BasicTestInfo.txt)运行它,它会在bin.Debug中创建该文件,但它是空的。我知道我正在到达using块的内部(我在那里放了一个Console.WriteLine),我知道我想要截断它,这就是为什么我使用false作为append(尽管用true或无参数替换false并不能解决问题)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并不能解决问题) 基本问题是,即使创建
基本问题是,即使创建了文件,文件中也没有文本行 显示的代码看起来不错 如果非要我猜的话,我会怀疑有一个例外(可能是因为
播放器
上的一个狡猾的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));