#include<fstream>y luego std::ofstream("file.txt");tan corto como en Python. :)
wilhelmtell
8
La razón por la que esto funciona (tanto en C ++ como en Python) es porque, de forma predeterminada, cuando abre un archivo para escribir, trunca los contenidos existentes. Entonces, realmente es un efecto secundario y, por lo tanto, preferiría la llamada explícita a truncate () por razones de claridad, aunque sea innecesario.
rmeador
77
si ha abierto el archivo usando "r +", use truncar (0) si ha analizado el archivo, lo que probablemente tiene. ¡Agregue esto a la respuesta anterior para completarlo!
Johan Engblom
3
use f.seek (0) para mover el puntero al comienzo del archivo
Johan Engblom
Estaba leyendo y escribiendo en el archivo. La respuesta trunca perfectamente el archivo, pero tenga cuidado si desea volver a escribirle algo, no olvide agregar f.seek(0)después f.truncate(0), de lo contrario tendrá \ x00 extraños al principio del archivo.
Krishna Chaitanya
29
No es una respuesta completa, sino una extensión de la respuesta de Ondra
Cuando use truncate()(mi método preferido) asegúrese de que su cursor esté en la posición requerida. Cuando se abre un nuevo archivo para leer, open('FILE_NAME','r')su cursor está en 0 de forma predeterminada. Pero si ha analizado el archivo dentro de su código, asegúrese de apuntar al principio del archivo nuevamente, es decir, truncate(0)
por defecto truncate()trunca el contenido de un archivo comenzando desde la posición actual del cusror.
Cuando lo uso with open("myfile.txt", "r+") as my_file:, obtengo ceros extraños myfile.txt, especialmente porque estoy leyendo el archivo primero. Para que funcione, primero tuve que cambiar el puntero de my_fileal comienzo del archivo con my_file.seek(0). Entonces podría hacer my_file.truncate()para borrar el archivo.
No hay necesidad de la close()llamada. El destructor cerrará el archivo. Así que solo necesita crear un temporal:ofstream("test.txt");
wilhelmtell
Esta pregunta ha cambiado desde esta respuesta. ¿Quizás eliminar la pregunta dada la nueva dirección de la pregunta?
Seanny123
1
Asignar el puntero de archivo a nulo dentro de su programa simplemente eliminará esa referencia al archivo. El archivo sigue ahí. Creo que la remove()función en la c stdio.hes lo que estás buscando allí. No estoy seguro acerca de Python.
Por cierto, tanto remove () como unlink () disminuirán el recuento de referencias en un archivo normal, en realidad no lo borrarán. El archivo se borrará una vez que el recuento de referencias baje a cero. Por ejemplo, si su proceso tiene el archivo abierto y llama a unlink () o remove () en él, no se eliminará hasta que el archivo esté cerrado () d (es decir, el recuento de referencias cae a cero; tampoco se supone que haya otros procesos tener el archivo abierto). Este comportamiento es útil, por ejemplo, para garantizar que no se dejen archivos temporales después de la finalización anormal del proceso (por ejemplo, abrir (), desvincular (), ejecutar archivo IO, CRASH , cerrar () NO llamado).
Nulo
1
Si la seguridad es importante para usted, entonces abrir el archivo para escribirlo y cerrarlo nuevamente no será suficiente. Al menos parte de la información seguirá estando en el dispositivo de almacenamiento y podría encontrarse, por ejemplo, utilizando una utilidad de recuperación de disco.
Supongamos, por ejemplo, que el archivo que está borrando contiene contraseñas de producción y debe eliminarse inmediatamente después de que se complete la operación actual.
Rellenar con cero el archivo una vez que haya terminado de usarlo ayuda a garantizar que se destruya la información confidencial.
En un proyecto reciente utilizamos el siguiente código, que funciona bien para archivos de texto pequeños. Sobrescribe los contenidos existentes con líneas de ceros.
import os
def destroy_password_file(password_filename):with open(password_filename)as password_file:
text = password_file.read()
lentext = len(text)
zero_fill_line_length =40
zero_fill =['0'* zero_fill_line_length
for _
in range(lentext // zero_fill_line_length +1)]
zero_fill = os.linesep.join(zero_fill)with open(password_filename,'w')as password_file:
password_file.write(zero_fill)
Tenga en cuenta que el relleno cero no garantizará su seguridad. Si realmente le preocupa, sería mejor rellenar con ceros y utilizar una utilidad especializada como File Shredder o CCleaner para limpiar el espacio 'vacío' en su unidad.
No puede "borrar" de un archivo en el lugar a menos que necesite borrar el final. Puede contentarse con sobrescribir un valor "vacío" o leer las partes del archivo que le interesan y escribirlo en otro archivo.
ok, ¿cómo sobrescribirlo sin dar valor de basura? Quiero decir, supongamos que hay una longitud de cadena de 9 y la sobrescribo con una longitud de cadena de 6. eso significaría 3 valores de basura rt?
Hick
Correcto. Además, tendría que tener alguna forma de identificar a cualquier lector el hecho de que esos 3 caracteres son basura.
Ignacio Vazquez-Abrams
El hecho es que mi código se extiende entre Python y C ++. así que si la lectura de un archivo se realiza en C ++ y la escritura del archivo en Python ... tanto el tiempo que el archivo tiene que ser borrado ...
Hick
0
Como los archivos de texto son secuenciales, no puede borrar directamente los datos en ellos. Sus opciones son:
La forma más común es crear un nuevo archivo. Lea el archivo original y escriba todo en el nuevo archivo, excepto la parte que desea borrar. Cuando se haya escrito todo el archivo, elimine el archivo antiguo y cambie el nombre del nuevo archivo para que tenga el nombre original.
También puede truncar y reescribir todo el archivo desde el punto que desea cambiar en adelante. Busque el punto que desea cambiar y lea el resto del archivo en la memoria. Vuelva al mismo punto, trunque el archivo y vuelva a escribir el contenido sin la parte que desea borrar.
Otra opción simple es sobrescribir los datos con otros datos de la misma longitud. Para eso, busque la posición exacta y escriba los nuevos datos. La limitación es que debe tener exactamente la misma longitud.
Mire el método seek/ truncatefunction / para implementar cualquiera de las ideas anteriores. Tanto Python como C tienen esas funciones.
solo quiero borrar todo el archivo desde el principio
Hick
2
Luego simplemente elimine el archivo. Use os.removeo os.unlinken python, o unlinken C. Otra opción es simplemente volver a abrir el archivo para escribirlo o usarlo truncate.
nosklo
0
Escribir y leer contenido de archivos
def writeTempFile(text =''):
filePath ="/temp/file1.txt"ifnot text:# If blank return file content
f = open(filePath,"r")
slug = f.read()return slug
else:
f = open(filePath,"a")# Create a blank file
f.seek(0)# sets point at the beginning of the file
f.truncate()# Clear previous content
f.write(text)# Write file
f.close()# Close filereturn text
Por supuesto, esta es una forma realmente mala de borrar un archivo porque requiere muchas líneas de código, pero acabo de escribir esto para mostrarle que también se puede hacer en este método.
Respuestas:
En python:
O, alternativamente, si ya tiene un archivo abierto:
En C ++, podría usar algo similar.
fuente
#include<fstream>
y luegostd::ofstream("file.txt");
tan corto como en Python. :)f.seek(0)
despuésf.truncate(0)
, de lo contrario tendrá \ x00 extraños al principio del archivo.No es una respuesta completa, sino una extensión de la respuesta de Ondra
Cuando use
truncate()
(mi método preferido) asegúrese de que su cursor esté en la posición requerida. Cuando se abre un nuevo archivo para leer,open('FILE_NAME','r')
su cursor está en 0 de forma predeterminada. Pero si ha analizado el archivo dentro de su código, asegúrese de apuntar al principio del archivo nuevamente, es decir,truncate(0)
por defectotruncate()
trunca el contenido de un archivo comenzando desde la posición actual del cusror.Un simple ejemplo
fuente
Al abrir un archivo en modo "escritura", se borra, no tiene que escribir específicamente en él:
(debe cerrarlo ya que el momento en que el archivo se cierra automáticamente puede ser específico de la implementación)
fuente
Del usuario @jamylak, una forma alternativa de
open("filename","w").close()
esfuente
Cuando lo uso
with open("myfile.txt", "r+") as my_file:
, obtengo ceros extrañosmyfile.txt
, especialmente porque estoy leyendo el archivo primero. Para que funcione, primero tuve que cambiar el puntero demy_file
al comienzo del archivo conmy_file.seek(0)
. Entonces podría hacermy_file.truncate()
para borrar el archivo.fuente
Tienes que sobrescribir el archivo. En C ++:
fuente
close()
llamada. El destructor cerrará el archivo. Así que solo necesita crear un temporal:ofstream("test.txt");
Asignar el puntero de archivo a nulo dentro de su programa simplemente eliminará esa referencia al archivo. El archivo sigue ahí. Creo que la
remove()
función en la cstdio.h
es lo que estás buscando allí. No estoy seguro acerca de Python.fuente
Si la seguridad es importante para usted, entonces abrir el archivo para escribirlo y cerrarlo nuevamente no será suficiente. Al menos parte de la información seguirá estando en el dispositivo de almacenamiento y podría encontrarse, por ejemplo, utilizando una utilidad de recuperación de disco.
Supongamos, por ejemplo, que el archivo que está borrando contiene contraseñas de producción y debe eliminarse inmediatamente después de que se complete la operación actual.
Rellenar con cero el archivo una vez que haya terminado de usarlo ayuda a garantizar que se destruya la información confidencial.
En un proyecto reciente utilizamos el siguiente código, que funciona bien para archivos de texto pequeños. Sobrescribe los contenidos existentes con líneas de ceros.
Tenga en cuenta que el relleno cero no garantizará su seguridad. Si realmente le preocupa, sería mejor rellenar con ceros y utilizar una utilidad especializada como File Shredder o CCleaner para limpiar el espacio 'vacío' en su unidad.
fuente
No puede "borrar" de un archivo en el lugar a menos que necesite borrar el final. Puede contentarse con sobrescribir un valor "vacío" o leer las partes del archivo que le interesan y escribirlo en otro archivo.
fuente
Como los archivos de texto son secuenciales, no puede borrar directamente los datos en ellos. Sus opciones son:
Mire el método
seek
/truncate
function / para implementar cualquiera de las ideas anteriores. Tanto Python como C tienen esas funciones.fuente
os.remove
oos.unlink
en python, ounlink
en C. Otra opción es simplemente volver a abrir el archivo para escribirlo o usarlotruncate
.Escribir y leer contenido de archivos
Funciono para mi
fuente
También puede usar esto (basado en algunas de las respuestas anteriores):
Por supuesto, esta es una forma realmente mala de borrar un archivo porque requiere muchas líneas de código, pero acabo de escribir esto para mostrarle que también se puede hacer en este método.
feliz codificación!
fuente