StreamWriter добавляет дополнительный \ r в конце строки
Я создал класс с обязанностью генерировать текстовый файл, где каждая строка представляет информацию об объекте класса «MyDataClass». Ниже приведено упрощение моего кода:
public class Generator
{
private readonly Stream _stream;
private readonly StreamWriter _streamWriter;
private readonly List<MyDataClass> _items;
public Generator(Stream stream)
{
_stream = stream;
_streamWriter = new StreamWriter(_stream, Encoding.GetEncoding("ISO-8859-1"));
}
public void Generate()
{
foreach (var item in _items)
{
var line = AnotherClass.GetLineFrom(item);
_streamWriter.WriteLine(line);
}
_streamWriter.Flush();
_stream.Position = 0;
}
}
И я называю этот класс так:
using (var file = new FileStream("name", FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
new Generator(file).Generate();
}
Когда я запускаю приложение в Visual Studio (я тестирую с помощью run (Ctrl + F5), debug (F5), в режиме отладки и выпуска), все идет по плану. Но я публикую приложение на сервере IIS, и теперь класс StreamWriter помещает дополнительный символ \ r перед концом строки.
Проверьте шестнадцатеричное чтение обоих сгенерированных файлов:
Запуск в Visual Studio:http://www.jonataspiazzi.xpg.com.br/hex_vs.bmp
Запуск в IIS:http://www.jonataspiazzi.xpg.com.br/hex_iis.bmp
Некоторые вещи, которые я уже проверил:
Написатьline
переменная (вvar line = AnotherClass.GetLineFrom(item);
) в журнале, чтобы увидеть, не исключен ли лишний '\ r' классомAnotherClass
.
Ничего не привело, последний символ вline
обычный символ, как и ожидалось (в примере выше - пробел).
Напишите другой код, чтобы увидеть, является ли проблема общей для всех экземпляров IIS StreamWriter.
Я попробовал это:
var ms = new MemoryStream();
var sw = new StreamWriter(ms, Encoding.GetEncoding("ISO-8859-1"));
sw.WriteLine("Test");
sw.WriteLine("Of");
sw.WriteLine("Lines");
sw.Flush();
ms.Position = 0;
В этом случае код хорошо работает как для Visual Studio, так и для IIS.
Я нахожусь в этом в течение 3 дней, я уже пробую все, что может думать мой мозг. У кого-нибудь была подсказка, что я могу попробовать?
ОБНОВИТЬ
Страннее! Я пытаюсь заменить линию_streamWriter.WriteLine(line);
с:
_streamWriter.Write(linhaTexto + Environment.NewLine);
И еще хуже
_streamWriter.Write(linhaTexto + "\r\n");
Оба продолжают генерировать дополнительные\r
персонаж.
Я пытаюсь заменить на это:
_streamWriter.Write(linhaTexto + "#\r\n#");
И получить: