2010-07-15 14 views
1

Pourquoi ce code n'écrire ma chaîne dans le fichier:peut écrire dans le fichier en utilisant BinaryWriter

string file = "Myfile.txt"; 
     MemoryStream ms = new MemoryStream(); 

void writeToFile(string text) 
     { 
      System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding(); 
      byte[] barr = encoding.GetBytes(text); 


      ms.Write(barr, 0, barr.Length); 

      using (FileStream fs = new FileStream(file, FileMode.OpenOrCreate)) 
      { 
       using (BinaryWriter bw = new BinaryWriter(ms)) 
       { 
        bw.Write(ms.ToArray()); 
       } 
      } 
     } 


     static void Main(string[] args) 
     { 

      Program p = new Program(); 

      p.writeToFile("Tony Test"); 

      Console.ReadLine(); 

     } 
+0

que se passe-t-il réellement? Erreur, fichier vide? –

Répondre

10

Regardez cette ligne:

using (BinaryWriter bw = new BinaryWriter(ms)) 

Vous écrivez Retour à la MemoryStream. Vous voulez:

using (BinaryWriter bw = new BinaryWriter(fs)) 

Cela dit, c'est une façon assez désagréable d'écrire dans un fichier, avec toutes sortes d'étapes inutiles. Espérons que c'était juste une expérimentation essayant de comprendre pourquoi quelque chose d'autre ne fonctionnait pas - mais si votre vrai code est réellement comme ceci, donnez s'il vous plaît des détails de ce que vous essayez de faire et nous pouvons vous aider à ranger.

+0

Ceci est copié à partir d'un morceau de code de production, non écrit par moi, qui n'écrivait pas dans le fichier et j'essayais de le déboguer. Pourriez-vous juste me dire ce qui est méchant à ce sujet? Il est vraiment supposé prendre un flux de mémoire et écrire le contenu (une chaîne) dans un fichier ... –

+0

Ce code force le processus à copier tout le contenu du 'MemoryStream' (avec l'appel' ToTray() '). Voir par exemple http://stackoverflow.com/questions/230128/best-way-to-copy-between-two-stream-instances-c pour de meilleures méthodes. –

+0

Merci, alors qu'est-ce que l'appel ToArray copie plus que la méthode fournie dans votre lien? –

0

Autre possibilité:

File.WriteAllText("myfile", "mytext"); 
3

Vous utilisez les MemoryStream ms pour l'entrée et la sortie. Changer la ligne

using (BinaryWriter bw = new BinaryWriter(ms)) 

à

using (BinaryWriter bw = new BinaryWriter(fs)) 
0

Vous écrivez au texte wtih le plus dur possible. vous devez utiliser File.WriteAllText (comme le dit Adam) ou Ajouter une méthode de texte. Si vous souhaitez utiliser un graveur avec un encodage spécial, vous devez utiliser StreamWriter, car il fonctionne avec des données de texte et vous pouvez définir l'encodage du fichier.