2014-09-25 101 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

相關問題