StreamWriter错误地写入文本文件的内容

时间:2014-09-25 13:39:59

标签: c# winforms streamwriter

我正在使用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 + '^'并写下该随机数。

3 个答案:

答案 0 :(得分:4)

尝试使用"

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

使用像

这样的表达式
int d = 0;
var t = d + '^'; // int + char

t的类型为int,而不是string


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

答案 1 :(得分:2)

它正在添加char literal&#39; ^&#39;的整数值。到d,所以d=123然后d + '^' = 217。改为使用字符串文字。

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

答案 2 :(得分:2)

问题是这个表达式:

d + '^'

不涉及任何字符串。它正在尝试添加intchar,它将char推广到int(其值为65342,因为这是UTF-16) '^')的代码单元,然后执行常规数字加法。然后,结果(int)将转换为字符串,因为后续+运算符的右侧操作数为str1[d]

可以使用字符串文字:

d + "^" + ...

但我个人会使用格式代替:

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

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