¿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?

Respuestas:


131

Puede utilizar el método File.WriteAllText .

System.IO.File.WriteAllText(@"Path/foo.bar",string.Empty);

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.

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.


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.


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);
     }
}

1

Intenta usar algo como

Archivo.Crear

Crea o sobrescribe un archivo en la ruta especificada.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.