StreamWriter füge ein zusätzliches \ r am Ende der Zeile hinzu

Ich habe eine Klasse mit der Verantwortung erstellt, eine Textdatei zu generieren, in der jede Zeile die Informationen eines Objekts der Klasse 'MyDataClass' darstellt. Unten ist eine Vereinfachung meines Codes:

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;
    }
}

Und ich nenne diese Klasse so:

using (var file = new FileStream("name", FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
    new Generator(file).Generate();
}

Wenn ich die Anwendung auf Visual Studio starte (ich teste mit run (Strg + F5), debugge (F5), mit debugge und release mode), läuft alles nach Plan. Aber ich veröffentliche die Anwendung auf einem IIS-Server und stelle jetzt in der StreamWriter-Klasse ein zusätzliches \ r vor das Zeilenende.

Überprüfen Sie das hexadezimale Lesen der beiden generierten Dateien:

In Visual Studio ausführen:http: //www.jonataspiazzi.xpg.com.br/hex_vs.bm

In IIS ausführen:http: //www.jonataspiazzi.xpg.com.br/hex_iis.bm

Einige Dinge, die ich bereits überprüft habe:

Schreiben Sie dieline variable (invar line = AnotherClass.GetLineFrom(item);) in einem Protokoll, um festzustellen, ob ein zusätzliches '\ r' von der Klasse @ ausgeschlossen isAnotherClass.

Hat nicht zu nichts geführt, das letzte Zeichen inline ist ein reguläres Zeichen wie erwartet (im obigen Beispiel ist es ein Leerzeichen).

Schreiben Sie einen anderen Code, um festzustellen, ob das Problem für alle IIS StreamWriter-Instanzen allgemein ist.

Ich habe es versucht:

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;

In diesem Fall funktioniert der Code sowohl für Visual Studio als auch für IIS.

Ich bin seit 3 Tagen dabei, ich probiere schon alles aus, was mein Gehirn denken kann. Hat jemand eine Ahnung, was ich probieren kann?

AKTUALISIERE

Get weirder! Ich versuche die Zeile @ zu ersetz_streamWriter.WriteLine(line); mit:

_streamWriter.Write(linhaTexto + Environment.NewLine);

Und noch schlimmer

_streamWriter.Write(linhaTexto + "\r\n");

Beide generieren weiterhin das zusätzliche\r Zeichen.

Ich versuche, mit diesem zu ersetzen:

_streamWriter.Write(linhaTexto + "#\r\n#");

Und bekomme

http: //www.jonataspiazzi.xpg.com.br/hex_sharp.bm

Antworten auf die Frage(8)

Ihre Antwort auf die Frage