【问题标题】:StreamWriter writing a text file's content incorrectlyStreamWriter 错误地写入文本文件的内容
【发布时间】:2014-11-20 07:37:36
【问题描述】:

我正在使用StreamWriter 类将一些文本写入新创建的文本文件,但输出总是奇怪的错误,这是我的代码:

StreamWriter sw = new StreamWriter("newtextfile.txt", false, Encoding.Unicode);
for (int d = 0; d < count; d++)
{
    sw.WriteLine(d + '^' + str1[d] + '^' + str2[d] + '^' + str3[d]);
}
sw.Flush();
sw.Close();

输出是这样的(这是文件的开头):

65342STR1^STR2^STR3
65343STR1^STR2^STR3

...等

我不知道为什么 WriteLine 会跳过 d + '^' 并写入该随机数。

【问题讨论】:

  • 为什么这个问题被否决了?来吧
  • 他们总是对我的问题投反对票,因为在 SO 中,您必须从某个地方开始,但必须始终在某个地方进行改进。
  • 振作起来,这有时会发生 :-)。 +1

标签: c# winforms streamwriter


【解决方案1】:

尝试使用":

sw.WriteLine(d + "^" + str1[d] + "^" + str2[d] + "^" + str3[d]);

像这样的表达方式

int d = 0;
var t = d + '^'; // int + char

t 的类型是 int,而不是 string


在您的情况下,65342 (== 0xFF3E) 出现是因为它是这个特殊的类似 ^ 的字符(全角抑扬符)的 Unicode。

【讨论】:

  • 谢谢你的回答,我不知道为什么会这样输出,但现在一切都好了。
【解决方案2】:

它将字符文字'^'的整数值添加到d,所以如果d=123然后d + '^' = 217。请改用字符串文字。

sw.WriteLine(d + "^" + str1[d] + "^" + str2[d] + "^" + str3[d]);

【讨论】:

    【解决方案3】:

    问题在于这个表达式:

    d + '^'
    

    不涉及任何字符串。它试图添加一个int 和一个char,它通过将char 提升为int(其值为65342,因为这是'^' 的UTF-16 代码单元),然后执行正常的数字加法。结果(int)随后被转换为字符串,因为随后的+ 运算符以str1[d] 作为其右手操作数。

    可以改用字符串文字:

    d + "^" + ...
    

    但我个人会改用格式:

    sw.WriteLine("{0}^{1}^{2}^{3}", d, str1[d], str2[d], str3[d]);
    

    在我看来,这更容易阅读。

    【讨论】:

    • @AlexD:是的,考虑到我们所看到的价值观,这是有道理的。谢谢,会解决的。
    猜你喜欢
    • 2021-12-09
    • 1970-01-01
    • 2021-12-19
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 2014-02-22
    相关资源
    最近更新 更多