2009-03-26 5 views
0

J'ai eu ce codepassage à un constructeur StreamWriter différent causant la mauvaise sortie

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

qui j'ai changé à ce (à cause d'un problème de contention):

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

Le problème est que le premier a bien fonctionné, produit un texte approprié qui était lisible par l'homme (ceci est pour un fichier texte de journal). Le second produit une sortie totalement visqueuse, quel que soit le type d'encodage utilisé. J'ai essayé ASCII, UTF7, 8, Unicode et par défaut. Donc, il me manque clairement quelque chose de fondamental sur FileStream ou TextWriter. S'il vous plaît, édulcatez-moi.

+0

Pouvez-vous inclure les premières douzaines d'octets de la sortie "screwy"? –

+0

Copié ce code dans une application de console autonome, et cela a parfaitement fonctionné. Il ne pense pas que votre problème est dans le code. –

+0

C'est ce que j'ai eu quand j'ai converti le texte en hex 32 avec le bloc-notes ++ "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 | " mais il devrait être: – jcollum

Répondre

3

J'ai essayé votre code sans être capable de reproduire un comportement étrange.

Quelques réflexions:

  • Vous ne vident pas votre StreamWriter ou votre FileStream.
  • Vous n'appelez pas Dispose sur votre StreamWriter et FileStream. Essayez d'envelopper ces dans l'utilisation des instructions.
  • L'encodage ASCII est mauvais. Je suppose que c'est juste une étape de test.
  • FileMode.OpenOrCreate va ouvrir ou créer le fichier. Il va ouvrir un fichier existant et écraser les premiers octets. Voulez-vous utiliser FileMode.Create pour créer un nouveau fichier ou remplacer un fichier existant?

EDIT:

La solution au problème est d'utiliser FileMode.APPEND, par des commentaires à ce poste.

+0

Ah, merci! Le problème était avec le FileMode.Devrait être FileMode.Append. Veuillez éditer votre réponse pour la mettre en évidence et je la marquerai comme la réponse. Toutes les autres choses que vous avez mentionnées sont importantes, mais le FileMode était le vrai problème. – jcollum

+0

+1, Bonne prise, il ne nettoyait pas le fichier et ne rougissait pas. L'encodage était un hareng rouge! –

+0

le StreamWriter a été réglé sur AutoFlush, j'ai vérifié cela au début; L'encodage ASCII était juste là parce que je l'ai essayé, je l'ai essayé par défaut d'abord; J'ai omis les instructions using, mais le code final a fait que – jcollum

0

Juste pour vérifier l'évidence, vous avez:

sw.WriteLine(text); 

dans le premier exemple et

sw.WriteLine(strLog); 

dans le second. Sans voir tout votre code, je ne peux pas connaître la réponse à ce qui suit, donc je me sens obligé de demander:

Est-ce que test et strLog différentes choses dans votre source, ou la différence est-elle seulement une faute de frappe?

Questions connexes