2011-12-22 25 views
17

Modifiqué mi código para poder abrir un archivo como de solo lectura. Ahora estoy teniendo problemas para usar File.WriteAllText porque mi FileStream y StreamReader no están convertidos en una cadena.¿Cómo convierto StreamReader a una cadena?

Este es mi código:

static void Main(string[] args) 
{ 
    string inputPath = @"C:\Documents and Settings\All Users\Application Data\" 
        + @"Microsoft\Windows NT\MSFax\ActivityLog\OutboxLOG.txt"; 
    string outputPath = @"C:\FAXLOG\OutboxLOG.txt"; 

    var fs = new FileStream(inputPath, FileMode.Open, FileAccess.Read, 
             FileShare.ReadWrite | FileShare.Delete); 
    string content = new StreamReader(fs, Encoding.Unicode); 

    // string content = File.ReadAllText(inputPath, Encoding.Unicode); 
    File.WriteAllText(outputPath, content, Encoding.UTF8); 
} 
+0

'StreamReader' no es una' cadena'. Usando el método 'File.ReadAllText' que ha comentado obtendría una' cadena'. –

+0

Parece que está copiando el contenido de un archivo a otro directorio. ¿Por qué no hacer una copia del archivo directamente en el directorio de salida? – docmanhattan

+0

Hola, me alegro de que hayas podido descifrar mi comentario en tu última publicación ... hagas un 'uso' en tu FileStream ... también debes probar/capturar cuando hagas disco IO ... como ya lo has hecho visto, hay muchos problemas potenciales. Aparte de eso, estas respuestas StreamReader.ReadToEnd() son lo que necesita. – rfmodulator

Respuesta

39

usar el método ReadToEnd() de StreamReader:

string content = new StreamReader(fs, Encoding.Unicode).ReadToEnd(); 

Es, por supuesto, importante cerrar la StreamReader después del acceso. Por lo tanto, una declaración using tiene sentido, según lo sugerido por keyboardP y otros.

string content; 
using(StreamReader reader = new StreamReader(fs, Encoding.Unicode)) 
{ 
    content = reader.ReadToEnd(); 
} 
+8

Yo recomendaría usar una declaración 'using' para las transmisiones. – albertjan

+0

y usando Path.Combine (...) en lugar de concatenación de cadenas, lo sé. Eliminé el ruido de mi respuesta dejando solo la línea que cambió – Adam

+3

Como mi respuesta ha sido aceptada, la he extendido para incluir una declaración de uso como en la respuesta de @ keyboardP. – Adam

11
string content = String.Empty; 

using(var sr = new StreamReader(fs, Encoding.Unicode)) 
{ 
    content = sr.ReadToEnd(); 
} 

File.WriteAllText(outputPath, content, Encoding.UTF8); 
+3

+1 para agregar la instrucción de uso para desechar el StreamReader – Jason

+1

de hecho, un punto importante. – Adam

3

Uso StreamReader.ReadToEnd() método.

Cuestiones relacionadas