2014-09-25 107 views
2

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

+1

为什么这个问题是downvoted?来吧 – 2014-09-25 15:36:15

+0

他们总是低估我的问题,因为在这样的情况下,你必须从某个地方开始,但那个地方一定要先进。 – Omarrrio 2014-09-25 15:41:13

+1

振作起来的男人,它有时会发生:-)。 +1 – 2014-09-25 15:42:22

回答

4

尝试使用"

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

有了这样的表达式

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

t类型int,不string


在你的情况,65342== 0xFF3E)出现,因为它是一个Unicode为这个特殊的^般的字符(全角抑扬音)。

+0

谢谢你的回答,我不知道为什么它会像这样输出,但现在一切都很好。 – Omarrrio 2014-09-25 14:01:16

2

它将char字符'^'的整数值加到d,所以如果d=123那么d + '^' = 217。改用字符串文字。

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

的问题是,这个表达式:

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]); 

这是简单的阅读,在我看来。

+0

@AlexD:是的,考虑到我们所看到的价值观,这是有道理的。谢谢,将解决。 – 2014-09-25 14:36:23

相关问题