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

Почему этот вопрос был занижен? приходите на –

+0

Они всегда меняют мои вопросы, потому что в SO вы должны что-то начать, но что-то всегда должно быть продвинуто. – Omarrrio

+1

Успокойся, это случается иногда :-). +1 –

ответ

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

2

Он добавляет целочисленное значение символьного символа '^' в 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: Да, это будет иметь смысл, учитывая ценности, которые мы видим. Спасибо, исправит. –

Смежные вопросы