Me gustaría crear un archivo .txt y escribirle, y si el archivo ya existe, solo quiero agregar algunas líneas más:
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 sobrescribirse siempre ... ¿cómo puedo evitar escribir en la misma línea (estoy usando esto en un bucle)?
Sé que es algo bastante simple, pero nunca he usado el WriteLine
método antes. Soy totalmente nuevo en C #.
c#
text-files
Berker Yüceer
fuente
fuente
if (file exists) { open file }
casi siempre es incorrecto en todos los lenguajes de programación! Para .NET la solución es usarFile.Open(path, FileMode.Append, FileAccess.ReadWrite)
con las banderas apropiadas.File.Open
delega internamente en una función WinAPI (ver el siguiente comentario) con la esperanza de prevenir la condición de carrera. La mayoría de las soluciones aquí no hacen esto y obviamente están sujetas a condiciones de carrera.Respuestas:
Usa el constructor correcto :
fuente
File.Open(path, FileMode.Append, FileAccess.ReadWrite)
y verificar el tamaño del archivo a través de esa secuencia devuelta.Vea también File.AppendAllText (). AppendAllLines agregará una nueva línea a cada línea sin tener que colocarla usted mismo.
Ambos métodos crearán el archivo si no existe para que no tenga que hacerlo.
fuente
fuente
Close()
desde unausing
declaración, ya que todos los recursos se cerrarán antes de ser eliminados automáticamente.En realidad, no tiene que verificar si el archivo existe, ya que StreamWriter lo hará por usted. Si lo abre en modo append, el archivo se creará si no existe, siempre se agregará y nunca se sobrescribirá. Entonces su verificación inicial es redundante.
fuente
File.AppendAllText agrega una cadena a un archivo. También crea un archivo de texto si el archivo no existe. Si no necesita leer contenido, es muy eficiente. El caso de uso está registrando.
fuente
Solo desea abrir el archivo en modo "agregar".
http://msdn.microsoft.com/en-us/library/3zc0w663.aspx
fuente
Cuando inicia StreamWriter, se anula el texto que estaba allí antes. Puede usar la propiedad append de esta manera:
fuente
fuente
File.Open(path, FileMode.Append, FileAccess.ReadWrite)
y verificar el tamaño del archivo a través de esa secuencia devuelta.Podrías usar un FileStream. Esto hace todo el trabajo por ti.
http://www.csharp-examples.net/filestream-open-file/
fuente
Prueba esto.
fuente
File.AppendText(path)
, y con él no hay necesidad de verificarFile.Exists(path)
. YIf (not A) Else If (A)
es un extraño If / Else. Básicamente no hay nada bueno en esta pregunta, no hay código de explicación que sea una versión reductora de otra respuesta.File.Open(path, FileMode.Append, FileAccess.ReadWrite)
y verificar el tamaño del archivo a través de esa secuencia devuelta.Puede usar el método File.AppendAllText () para resolver su problema. Este método se encargará de la creación de archivos si no está disponible, abriendo y cerrando el archivo.
fuente
A partir de la documentación de microsoft, puede crear un archivo si no existe y agregarlo en una sola llamada File.AppendAllText Method (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 lo cierra. Espacio de nombres: System.IO Assembly: mscorlib (en mscorlib.dll)
Sintaxis C # C ++ F # VB public static void AppendAllText (ruta de cadena, contenido de cadena) Ruta de parámetros Tipo: System.String El archivo al que se agrega la cadena especificada. contenido Tipo: System.String La cadena que se agregará al archivo.
AppendAllText
fuente
fuente