¿Cómo puedo borrar el contenido de un archivo?

80

Necesito borrar el contenido de un archivo en particular cada vez que se inician las aplicaciones. ¿Cómo lo hago?

aceituna
fuente

Respuestas:

131

Puede utilizar el método File.WriteAllText .

System.IO.File.WriteAllText(@"Path/foo.bar",string.Empty);
El Scrum Meister
fuente
Tengo un archivo con un vínculo físico, y uso File.WriteAllText, parece que esto a veces (?) Elimina el archivo ya que los vínculos físicos no se mantienen actualizados.
Ciantic
1
Le recomiendo que no lo haga si otra operación accede al archivo inmediatamente después de esta operación. Enfrenté un problema en el que el archivo no se cerró, escriba después de esta línea de código, y la causa IO exceptions of file is in use, por lo que le recomiendo que lo maneje manualmente a través del flujo de archivos
deadManN
84

Esto es lo que hice para borrar el contenido del archivo sin crear un archivo nuevo, ya que no quería que el archivo mostrara una nueva hora de creación, incluso cuando la aplicación acaba de actualizar su contenido.

FileStream fileStream = File.Open(<path>, FileMode.Open);

/* 
 * Set the length of filestream to 0 and flush it to the physical file.
 *
 * Flushing the stream is important because this ensures that
 * the changes to the stream trickle down to the physical file.
 * 
 */
fileStream.SetLength(0);
fileStream.Close(); // This flushes the content, too.
Abhay Jain
fuente
Usé .NET 3.5, por si acaso quieres saber la versión.
Abhay Jain
Olive, si responde a su pregunta, ¿podría marcarla como respuesta? Sin embargo, si la solución propuesta no funciona en su caso, háganoslo saber incluso entonces.
Abhay Jain
5
+1 Esta es la única forma de adquirir primero un bloqueo de archivo, comprobar los atributos del archivo de forma segura y, finalmente, borrar el contenido.
mafu
1
Esto es exactamente lo que yo necesitaba ... necesito que un servicio se comunique con una aplicación para enviar mensajes simples línea por línea a un usuario, y esto me permite mantener mi archivo bloqueado y borrar los mensajes para evitar que la aplicación de servicio de insertar y soltar mensajes inadvertidamente o duplicar mensajes.
phillk6751
2
¿No sería recomendable crear el flujo de archivos en un bloque de uso? Eso cerraría automáticamente la corriente también.
Wuolennaj
12

Úselo FileMode.Truncatecada vez que cree el archivo. También coloque el File.Createinterior a try catch.

sajoshi
fuente
2

La forma más sencilla de hacer esto es quizás eliminar el archivo a través de su aplicación y crear uno nuevo con el mismo nombre ... de una manera aún más simple, simplemente haga que su aplicación lo sobrescriba con un nuevo archivo.

Kartikya
fuente
1
Puede haber problemas si intenta crear el archivo poco después de la eliminación. A veces, el sistema operativo no puede crear un archivo porque "cree" que el archivo todavía existe.
Dmitrii Lobanov
@Dmitry Lobanov - [Sé que este es un hilo antiguo]. No acepto que el sistema operativo a veces piense que un archivo todavía existe, a menos que haya una buena razón. Sería un sistema operativo muy pobre si lo hiciera. Es mucho más probable que algo todavía tenga un identificador abierto en el archivo existente. Incluso podría ser su propio software si no tiene cuidado al cerrar los archivos (al usar 'usar', por ejemplo, para garantizar la eliminación). También podría ser el antivirus. Sin embargo, esté de acuerdo con su conclusión. Creo que FileMode.Truncate es el camino a seguir.
Steve Kidd
2

La forma más sencilla es:

File.WriteAllText(path, string.Empty)

Sin embargo, te recomiendo que uses FileStreamporque la primera solución puede arrojarUnauthorizedAccessException

using(FileStream fs = File.Open(path,FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
     lock(fs)
     {
          fs.SetLength(0);
     }
}
Mohammad Albay
fuente
1

Intenta usar algo como

Archivo.Crear

Crea o sobrescribe un archivo en la ruta especificada.

Adriaan Stander
fuente
No es una buena idea para la pregunta formulada: no elimina los datos que ya están en el archivo, solo los sobrescribe a la longitud de los nuevos datos, por lo que si los datos antiguos> los nuevos, terminará con una combinación de los dos.
namford