2010-07-19 3 views
5

У меня очень простое консольное приложение, которое создает текстовый файл. Ниже приводится резюме кода:StreamWriter пишет возврат каретки?

StreamWriter writer = File.CreateText("c:\\temp.txt"); 
foreach (blah...) 
{ 
    writer.Write(body.ToString() + "\n"); 
    writer.Flush(); 
} 
writer.Close(); 

Клиент утверждает, есть возврат каретки в конце каждой строки. Откуда берутся эти перевозки?

Обновление: После открытия в редакторе двоичных файлов VS и Notepad ++ не было вхождений 0d 0a. Я собираюсь вернуться к клиенту.

+2

Что они используют для чтения файлов, чтобы проверить это? – ChrisF

+5

Вы говорите: «клиент требует ...» Вы проверили себя? –

+0

Дэн, какая хорошая утилита для просмотра этих специальных символов? –

ответ

3

Открыть файл в бинарном редакторе Visual Studio (File.Open.File, щелкнуть стрелку вниз на кнопке Open, выбрать Open With ... и выбрать Binary Editor) и найти 0D байт. Если ни один из них присутствуют, то либо:

  • ваш клиент не может сказать разницу между подачей строки и возврата каретки,

  • ваш метод передачи изменения файла в пути следования. Происходит ли какое-либо несоответствие в бинарном/ascii-протоколе FTP?

Если являются0D байт, то они присутствуют в вашей body переменной.

+2

Или клиент открывает файл с помощью инструмента/функции, который автоматически заменяет \ n с \ r \ n. Многие текстовые редакторы Windows делают это. –

+0

Это хорошо. Я обнаружил появление 0d 0a между строками при открытии в двоичном редакторе VS, но не с Notepad ++. Значит, он должен существовать в переменной тела? Я обновлю свое оригинальное сообщение с кодом. –

+0

FYI, клиент не знал, о чем они говорили, поскольку у файла не было никаких возвратов каретки. –

1

"\n" в конце каждого write вызова

EDIT: Я знаю, что это новая линия, а не возврат каретки, но я держал пари денег клиента путаться между ними, и это на самом деле это что вызывает проблему

+6

Это линия, а не возврат каретки. – BoltClock

+4

'\ n' - это фид. '\ r' - возврат каретки. – ChrisF

+0

@BoltClock, @ChrisF - Я знаю, но если в конце тела нет возврата carraige, это будет то, что клиент жалуется на – w69rdy

1

В коде вы помещаете фид строки (\ n).

Ваш клиент говорит о возврате каретки (\ r). Может быть, ваш клиент берет финишную прямую за возврат каретки?

0

Выполняет ли клиент различение CR и LF? Нужна ли флеш()? Перегружаете ли вы буфер, если вы не зафрезируете?

Если у вас нет большого количества текста, вы можете найти больше возможностей для создания StringBuilder для форматирования текста точно так, как вы хотите, с помощью \ n, \ r, \ t или любого другого, а затем перекачивая его непосредственно в StreamWriter ,

0

Если каждый символ body был '\ r', это объясняет, что вы видите.

0

Вы проверили, заканчивается ли body символами, которые вы не хотите печатать? Это другой потенциальный источник проблемы.

3

Я проверил ваш код.

alt text http://img830.imageshack.us/img830/5443/18414385.png

код вы вывесили не имеет возврата каретки (0D) только новые строки (0A). Что-то еще создает возврат каретки, или клиент не знает, что такое возврат каретки.