2012-03-28 11 views
96

Me gustaría crear un archivo .txt y escribir en él, y si el archivo ya existe, solo quiero añadir algunas líneas más :Cree un archivo .txt si no existe, y si agrega una nueva línea

string path = @"E:\AppServ\Example.txt"; 
if (!File.Exists(path)) 
{ 
    File.Create(path); 
    TextWriter tw = new StreamWriter(path); 
    tw.WriteLine("The very first line!"); 
    tw.Close(); 
} 
else if (File.Exists(path)) 
{ 
    TextWriter tw = new StreamWriter(path); 
    tw.WriteLine("The next line!"); 
    tw.Close(); 
} 

Pero la primera línea parece conseguir siempre sobrescribe ... ¿cómo puedo evitar escribir en la misma línea (estoy usando esto en un bucle)?

Sé que es una cosa bastante simple, pero nunca he usado el método WriteLine antes. Soy totalmente nuevo en C#.

Respuesta

113

Uso del correct constructor:

else if (File.Exists(path)) 
{ 
    using(var tw = new StreamWriter(path, true)) 
    { 
     tw.WriteLine("The next line!"); 
    } 
} 
+7

Primera respuesta, respuesta más sencilla, respuesta más útil para mí lol. Cuando lo miré, yo estaba como: ¿Eh? solo agregar ", verdad" es suficiente? ¿Cómo es que no voy a ver eso antes? Maldición ... Me sentí como un total tonto gracias. Realmente me gustan estas buenas respuestas. –

+3

sugerencia: si el archivo no existe, este constructor crea un nuevo archivo. –

+1

envuélvalo en un uso (ver respuesta a continuación). –

5

Lo que desea abrir el archivo en modo "añadir".

http://msdn.microsoft.com/en-us/library/3zc0w663.aspx

+0

Sí, esto es útil también, pero yo estaba buscando una solución rápida y sencilla y gracias a @Daniel Hilgarth proporcionó esa solución. entonces +1. –

1

Al iniciar StreamWriter es reemplazar el texto que había antes. Puede utilizar la propiedad de agregación de este modo:

TextWriter t = new StreamWriter(path, true); 
4
else if (File.Exists(path)) 
{ 
    using (StreamWriter w = File.AppendText(path)) 
     { 
      w.WriteLine("The next line!"); 
      w.Close(); 
     } 
} 
+0

otra buena respuesta que funciona bien gracias. +1 –

35
string path = @"E:\AppServ\Example.txt"; 
File.AppendAllLines(path, new [] { "The very first line!" }); 

Véase también File.AppendAllText(). AppendAllLines agregará una línea nueva a cada línea sin tener que colocarla allí.

Ambos métodos crearán el archivo si no existe, por lo que no es necesario.

+0

esto parece una muy buena manera! Gracias. –

20
string [email protected]"E:\AppServ\Example.txt"; 

if(!File.Exists(path)) 
    { 
     File.Create(path).Dispose(); 
     using(TextWriter tw = new StreamWriter(path)) 
     { 
      tw.WriteLine("The very first line!"); 
      tw.Close(); 
     } 

} 

    else if (File.Exists(path)) 
    { 
     using(TextWriter tw = new StreamWriter(path)) 
     { 
      tw.WriteLine("The next line!"); 
      tw.Close(); 
     } 
    } 
+0

También tengo un problema similar y encuentro este póster, pero las soluciones aquí no resuelven mi problema. Así que uso algunos trozos de solución y simplemente agrego Dispose(). Mi objetivo no implica copiar y pegar. – Aek

+0

No estoy sugiriendo que lo hiciera; Estoy diciendo que sin incluir eso en su respuesta, el póster original no sabrá por qué hizo los cambios que hizo o qué se supone que deben lograr. Siempre incluya toda la información relevante cuando publique, para que la gente sepa todo lo que está haciendo. :) – DiMono

+0

Ok :) gracias por sus consejos :) – Aek

10

En realidad no tiene que comprobar si el archivo existe, como StreamWriter lo hará por ti. Si lo abre en el modo de agregar, el archivo se creará si no existe, entonces siempre se agregará y nunca se escribirá. Entonces su verificación inicial es redundante.

TextWriter tw = new StreamWriter(path, true); 
tw.WriteLine("The next line!"); 
tw.Close(); 
0

De la documentación de Microsoft, puede crear archivo si no existe y anexar a ella en una sola llamada File.AppendAllText Método (String, String)

.NET Framework (versión actual) Otras versiones

Abre un archivo, agrega la cadena especificada al archivo y luego cierra el archivo. Si el archivo no existe, este método crea un archivo, escribe la cadena especificada en el archivo y luego cierra el archivo. Espacio de nombres: System.IO Montaje: mscorlib (en mscorlib.DLL)

Sintaxis C# C++ F # VB AppendAllText ( string path, contenidos public void cadena ) Parámetros trayectoria Tipo: System.String El archivo que desea añadir a la cadena especificada . contenido Tipo: System.String La cadena para anexar al archivo.

AppendAllText

0

File.AppendAllText añade una cadena en un archivo. También crea un archivo de texto si el archivo no existe. Si no necesita leer el contenido, es muy eficiente. El caso de uso es iniciar sesión.

File.AppendAllText("C:\\log.txt", "hello world\n"); 
Cuestiones relacionadas