web-dev-qa-db-fra.com

StreamWriter.Write n'écrit pas dans un fichier; aucune exception levée

Mon code en C # (asp.net MVC)

StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt");

// write a line of text to the file
tw.Write("test");

Le fichier est créé mais est vide. Aucune exception n'est levée. Je n'ai jamais vu cela auparavant et je suis coincé ici; J'ai juste besoin d'écrire une sortie de débogage.

S'il vous plaît donnez votre avis.

19
sarsnake

Utilisation

System.IO.File.WriteAllText(@"path\te.txt", "text");
6
crassr3cords

StreamWriter est mis en mémoire tampon par défaut, ce qui signifie qu'il ne sortira pas tant qu'il ne recevra pas un appel Flush () ou Close ().

Vous pouvez changer cela en définissant la propriété AutoFlush , si vous le souhaitez. Sinon, faites simplement:

StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt");

// write a line of text to the file
tw.Write("test");
tw.Close();  //or tw.Flush();
50
Benjamin Cox

Ni rincé, ni fermé, ni éliminé. essaye ça

using (StreamWriter tw = new StreamWriter(@"C:\mycode\myapp\logs\log.txt"))
{
    // write a line of text to the file
    tw.Write("test");
    tw.Flush();
}

ou ma préférence

using (FileStream fs = new FileStream( @"C:\mycode\myapp\logs\log.txt"
                                     , FileMode.OpenOrCreate
                                     , FileAccess.ReadWrite)           )
{
    StreamWriter tw = new StreamWriter(fs);
    tw.Write("test");
    tw.Flush();
}
6
Tony Hopkinson

Vous devez fermer ou vider le StreamWriter après avoir terminé l'écriture.

tw.Close();

ou

tw.Flush();

Mais la meilleure pratique consiste à encapsuler le code de sortie dans une instruction using, car StreamWriter implémente IDisposable:

using (StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt")){
// write a line of text to the file
tw.Write("test");
}
5
pedram bashiri
FileStream fs = new FileStream("d:\\demo.txt", FileMode.CreateNew,
                               FileAccess.Write);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.ASCII);
int data;

sw.Write("HelloWorld");

sw.Close();
fs.Close();
  • Le problème est que lorsque l'objet StreamWriter est créé avec la référence de l'objet FileStream, l'objet SW attendra toujours des données jusqu'à ce que l'objet SW soit fermé.
  • Donc, après avoir utilisé sw.Close (); Votre fichier ouvert sera fermé et prêt à afficher la sortie.
3
Phani Tekkem

Ya dans VB.net ce n'était pas nécessaire mais il semble qu'avec CSharp vous avez besoin d'un appel Writer.Flush pour forcer l'écriture. Bien sûr, Writer.Close () forcerait également le rinçage.

Nous pouvons également définir la propriété AutoFlush de l'instance StreamWriter:

sw.AutoFlush = true;
// Gets or sets a value indicating whether the StreamWriter 
// will flush its buffer to the underlying stream after every  
// call to StreamWriter.Write.

De: http://msdn.Microsoft.com/en-us/library/system.io.streamwriter.autoflush (v = vs.110) .aspx

1
shivesh suman

une alternative

FileStream mystream = new FileStream("C:\\mycode\\myapp\\logs\\log.txt",    
FileMode.OpenOrCreate, FileAccess.Write);           
StreamWriter tw = new StreamWriter(mystream); 
tw.WriteLine("test");
tw.close();
0
user1415567

Essayez de fermer le fichier ou ajoutez \n à la ligne telle que

tw.WriteLine("test");
tw.Close();
0
Hai Bi