2012-06-13 22 views
14

Mi código en C# (asp.net MVC)StreamWriter.Write no escribe en el archivo; no es una excepción lanzada

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

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

El archivo se crea, pero está vacía. No se arroja ninguna excepción. Nunca había visto esto antes y estoy atrapado aquí; Solo necesito escribir algunos resultados de depuración.

Por favor, asesorar.

+0

En caso de que ayude a las personas a tener una idea, ¿qué idioma?(presumiblemente C++ o C#) – akroy

+0

ver la descripción editada – sarsnake

Respuesta

6

Uso

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

esta es la mejor respuesta, si sabes que el contenido de salida no será tan grande ... –

40

StreamWriter es amortiguada por defecto, lo que significa que no se emitirá hasta que recibe una Escalera() o Cerrar la palabra().

Puede cambiar eso configurando la propiedad AutoFlush, si así lo desea. De lo contrario, solo haga lo siguiente:

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(); 
+1

Tuve el mismo problema: no pude entender por qué no estaba escribiendo aunque todo fue correcto No sabía acerca de la descarga/cierre. Creo que esta es la mejor respuesta en general. (Sé que esto es viejo) – alykins

4

Ni enjuagado ni cerrado ni desechado. probar este

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

o mi preferencia

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(); 
} 
0

una alternativa

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

intenta cerrar el archivo o añadir \n a la línea como

tw.WriteLine("test"); 
tw.Close(); 
1

Ya en VB.net esto no fue necesario pero parece que con CSharp necesitas una llamada Writer.Flush para forzar la escritura. Por supuesto, Writer.Close() forzaría el color también.

También puede establecer la propiedad de la instancia AutoFlush 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. 

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

1

Necesitas cerrar o enjuague el StreamWriter después de terminar la escritura.

tw.Close(); 

o

tw.Flush(); 

Pero la mejor práctica es envolver el código de salida de una instrucción using, ya que StreamWriter implementa IDisposable:

using (StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt")){ 
// write a line of text to the file 
tw.Write("test"); 
} 
2
 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(); 
  • El problema es cuando se crea el objeto StreamWriter con referencia a FileStrea m Objeto, el objeto SW siempre esperará algunos datos hasta que el objeto SW esté cerrado.
  • Entonces después de usar sw.Close(); Su archivo abierto se cerrará y se preparará para mostrar la salida.
Cuestiones relacionadas