2009-03-26 7 views
0

ich diesen Code hattezu einem anderen Stream Konstruktor Ändern schlechten Ausgang verursachen

StreamWriter sw = new StreamWriter(this.FileName, true); 
sw.WriteLine(text); 
sw.Close(); 

, den ich dies geändert (wegen einer Konkurrenz Ausgabe):

StreamWriter sw = new StreamWriter(
      new FileStream(this.FileName, FileMode.OpenOrCreate 
       , FileAccess.ReadWrite, FileShare.Write) 
      , Encoding.ASCII); 
sw.WriteLine(strLog); 
sw.Close(); 

Das Problem ist, dass die ersten funktionierte gut, gab richtigen Text aus, der für Menschen lesbar war (dies gilt für eine Log-Text-Datei). Der zweite gibt einen total verschraubten Ausgang aus, unabhängig von der Art der Kodierung, die ich benutzt habe. Ich habe versucht, ASCII, UTF7, 8, Unicode und Standard. Also ich vermisse etwas Grundlegendes zu FileStream oder TextWriter. Bitte edumacate mich.

+0

Können Sie bitte die ersten paar Bytes des "verschraubten" Ausgangs einbeziehen? –

+0

Dieser Code wurde in eine eigenständige Konsolen-App kopiert und es funktionierte perfekt. Es glaubt nicht, dass dein Problem im Code liegt. –

+0

Dies ist, was ich bekam, wenn ich den Text auf Hex 32 mit Notepad ++ umwandelte "000000000 32 30 30 39 30 33 32 36-2D 30 39 33 35 34 36 09-46 69 6E 69 73 68 65 64-2C 20 6E 6F 20 69 74 65 | 20090326-093546.Finished, no ite | " aber es sollte sein: – jcollum

Antwort

3

Ich habe Ihren Code versucht, ohne in der Lage zu sein, irgendein seltsames Verhalten zu reproduzieren.

Ein paar Gedanken:

  • Sie Ihre Stream oder Ihre Filestream nicht spülen.
  • Sie rufen Dispose nicht in Ihrem StreamWriter und FileStream auf. Versuchen Sie, diese mit Anweisungen zu umhüllen.
  • Ascii Codierung ist böse. Ich nehme an, das ist nur ein Testschritt.
  • FileMode.OpenOrCreate wird ... öffnen oder erstellen Sie die Datei. Es öffnet eine bereits existierende Datei und überschreibt die ersten Bytes. Möchten Sie FileMode.Create verwenden, um eine neue Datei zu erstellen oder eine vorhandene Datei zu überschreiben?

EDIT:

Die Lösung des Problems war FileMode.APPEND zu verwenden, pro Kommentare zu diesem Beitrag.

+0

Ah hah, danke! Das Problem war mit dem FileMode.Sollte FileMode.Append sein. Bitte bearbeiten Sie Ihre Antwort, um dies hervorzuheben, und ich werde sie als Antwort markieren. Alle anderen Dinge, die du erwähnt hast, sind wichtig, aber der FileMode war das eigentliche Problem. – jcollum

+0

+1, Guter Fang, er löschte die Datei nicht und spülte nicht. Die Codierung war ein Ablenkungsmanöver! –

+0

der StreamWriter wurde auf AutoFlush eingestellt, das habe ich am Anfang überprüft; ASCII-Codierung war nur da, weil ich es versuchte, ich hatte Standard zuerst versucht; Ich habe die using-Anweisungen weggelassen, aber der letzte Code hatte das – jcollum

0

nur das Offensichtliche zu überprüfen, Sie haben:

sw.WriteLine(text); 

im ersten Beispiel und

sw.WriteLine(strLog); 

in der zweiten. Ohne den ganzen Code zu sehen, kann ich die Antwort auf das Folgende nicht wissen, daher muss ich fragen:

Sind Test und StrLog verschiedene Dinge in Ihrer Quelle, oder ist der Unterschied nur ein Tippfehler?

Verwandte Themen