更改为不同的StreamWriter构造函数导致输出错误

时间:2009-03-26 16:25:15

标签: c# .net

我有这个代码

StreamWriter sw = new StreamWriter(this.FileName, true);
sw.WriteLine(text);
sw.Close();

我改为此(由于争用问题):

StreamWriter sw = new StreamWriter(
          new FileStream(this.FileName, FileMode.OpenOrCreate
               , FileAccess.ReadWrite, FileShare.Write)
          , Encoding.ASCII); 
sw.WriteLine(strLog);
sw.Close();

问题是第一个工作正常,输出了人类可读的正确文本(这是一个日志文本文件)。第二个输出完全螺旋输出,无论我使用的编码类型如何。我尝试过ASCII,UTF7,8,Unicode和Default。很明显,我遗漏了一些关于FileStream或TextWriter的基本知识。请爱我。

2 个答案:

答案 0 :(得分:3)

我已经尝试过你的代码而无法重现任何奇怪的行为。

一些想法:

  • 您不会刷新StreamWriter或FileStream。
  • 您不要在StreamWriter和FileStream上调用Dispose。尝试使用语句包装它们。
  • Ascii编码是邪恶的。我认为这只是一个测试步骤。
  • FileMode.OpenOrCreate将...打开或创建文件。它将打开一个已存在的文件并覆盖第一个字节。是否要使用FileMode.Create创建新文件,或覆盖现有的?

编辑:

该问题的解决方案是使用FileMode.Append,根据这篇文章的评论。

答案 1 :(得分:0)

只是为了检查明显的,你有:

sw.WriteLine(text);
第一个例子中的

sw.WriteLine(strLog);

在第二个。没有看到你的所有代码,我无法知道以下的答案,所以我不得不问:

您的来源中的测试和strLog是不同的东西,还是差别只是一个错字?