2009-03-03 25 views
60

Quiero leer y escribir en un archivo. Esto no funcionaCómo leer y escribir un archivo en C#

static void Main(string[] args) 
{ 
    StreamReader sr = new StreamReader(@"C:\words.txt"); 
    StreamWriter sw = new StreamWriter(@"C:\words.txt"); 
} 

¿Cómo puedo leer y escribir en un archivo en C#?

Respuesta

68

Necesita un solo flujo, abierto tanto para leer como para escribir.

FileStream fileStream = new FileStream(
     @"c:\words.txt", FileMode.OpenOrCreate, 
     FileAccess.ReadWrite, FileShare.None); 
+10

FileShare.ReadWrite no es necesario, y es probable que no sea aceptable, permitirá que otras aplicaciones lean y escriban su archivo mientras lo está usando. En general, se prefiere FileShare.None al escribir en un archivo, para evitar que otros accedan a un archivo mientras usted trabaja en él. – ScottS

+0

@ScottS: estoy de acuerdo en lo que se refiere a ReadWrite ya que puede dejar que el constructor descubra el modo de compartir. – Samuel

+2

Omita el último ')' – user194743

30
var fs = File.Open("file.name", FileMode.OpenOrCreate, FileAccess.ReadWrite); 
var sw = new StreamWriter(fs); 
var sr = new StreamReader(fs); 

... 

fs.Close(); 
//or sw.Close(); 

La clave es abrir el archivo con la bandera FileAccess.ReadWrite. A continuación, puede crear cualquier Stream/String/Binary Reader/Writers que necesite utilizando FileStream inicial.

60

no se olvide el camino fácil:

static void Main(string[] args) 
    { 
     var text = File.ReadAllText(@"C:\words.txt"); 
     File.WriteAllText(@"C:\words.txt", text + "DERP"); 
    } 
+13

@Copperpot: verifique los requisitos de la pregunta. No dice nada sobre el bloqueo. Además, no dice nada acerca de los bloqueos de discos duros o los impactos de meteoritos que interrumpen también. – Will

+1

Creo que la pregunta implica 'al mismo tiempo'. –

+3

@JohnAtwood Ya sabes lo que dicen sobre las suposiciones. Nunca seleccionó una respuesta correcta, por lo que nunca * realmente * sabremos. – Will

1

Este hilo parece responder a su pregunta: simultaneous-read-write-a-file

Básicamente, lo que necesita es declarar dos FileStream, uno para las operaciones de lectura, el otro para las operaciones de escritura. Writer Filestream necesita abrir su archivo en modo 'Anexar'.

Cuestiones relacionadas