#include<fstream>puis à std::ofstream("file.txt");peu près aussi court qu'en Python. :)
wilhelmtell
8
la raison pour laquelle cela fonctionne (à la fois en C ++ et en python) est que, par défaut, lorsque vous ouvrez un fichier pour l'écriture, cela tronque le contenu existant. Donc, vraiment, c'est en quelque sorte un effet secondaire, et donc je préférerais l'appel explicite à truncate () pour des raisons de clarté, même si ce n'est pas nécessaire.
rmeador
7
si vous avez ouvert le fichier en utilisant "r +", utilisez truncate (0) si vous avez analysé le fichier, ce que vous avez probablement. Ajoutez ceci à la réponse ci-dessus pour qu'elle soit complète!
Johan Engblom
3
utilisez f.seek (0) pour déplacer le pointeur au début du fichier
Johan Engblom
Je lisais ainsi que j'écrivais dans un fichier. La réponse tronque parfaitement le fichier, mais méfiez-vous si vous voulez y écrire à nouveau quelque chose, n'oubliez pas d'ajouter f.seek(0)après f.truncate(0), sinon vous aurez un \ x00 bizarre ajouté au début du fichier.
krishna chaitanya
29
Pas une réponse complète mais plutôt une extension de la réponse d'Ondra
Lorsque vous utilisez truncate()(ma méthode préférée), assurez-vous que votre curseur est à la position requise. Lorsqu'un nouveau fichier est ouvert en lecture, open('FILE_NAME','r')son curseur est à 0 par défaut. Mais si vous avez analysé le fichier dans votre code, assurez-vous de pointer à nouveau au début du fichier, c'est-à-dire que truncate(0)
par défaut truncate()tronque le contenu d'un fichier à partir de la position actuelle du cusror.
Lors de l'utilisation with open("myfile.txt", "r+") as my_file:, j'obtiens d'étranges zéros myfile.txt, d'autant plus que je lis le fichier en premier. Pour que cela fonctionne, j'ai d'abord dû changer le pointeur de my_filevers le début du fichier avec my_file.seek(0). Ensuite, je pourrais faire my_file.truncate()pour effacer le fichier.
Il n'y a pas besoin de l' close()appel. Le destructeur fermera le fichier. Il vous suffit donc de créer un temporaire:ofstream("test.txt");
wilhelmtell
Cette question a changé depuis cette réponse. Peut-être supprimer la question étant donné la nouvelle direction de la question?
Seanny123
1
Attribuer le pointeur de fichier à null dans votre programme supprimera simplement cette référence au fichier. Le fichier est toujours là. Je pense que la remove()fonction dans le c stdio.hest ce que vous recherchez là-bas. Pas sûr de Python.
BTW, à la fois remove () et unlink () réduiront le nombre de références sur un fichier normal, pas l'effacer réellement. Le fichier sera effacé une fois que le nombre de références tombe à zéro. Par exemple, si votre processus a le fichier ouvert et que vous appelez unlink () ou remove () dessus, il ne sera pas supprimé tant que le fichier ne sera pas close () d (c'est-à-dire que le nombre de ref tombe à zéro - suppose également qu'aucun autre processus ouvrir le fichier). Ce comportement est utile, par exemple, pour garantir que les fichiers temporaires ne sont pas laissés après une interruption anormale du processus (par exemple, open (), unlink (), exécuter un fichier IO, CRASH , close () NON appelé).
Annulé
1
Si la sécurité est importante pour vous, ouvrir le fichier pour l'écrire et le refermer ne suffira pas. Au moins certaines des informations seront toujours sur le périphérique de stockage et pourront être trouvées, par exemple, à l'aide d'un utilitaire de récupération de disque.
Supposons, par exemple, que le fichier que vous effacez contient des mots de passe de production et doit être supprimé immédiatement après la fin de l'opération en cours.
Le remplissage à zéro du fichier une fois que vous avez fini de l'utiliser permet de garantir la destruction des informations sensibles.
Sur un projet récent, nous avons utilisé le code suivant, qui fonctionne bien pour les petits fichiers texte. Il écrase le contenu existant avec des lignes de zéros.
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)
Notez que le remplissage nul ne garantira pas votre sécurité. Si vous êtes vraiment inquiet, vous feriez mieux de ne rien remplir et d' utiliser un utilitaire spécialisé comme File Shredder ou CCleaner pour nettoyer l'espace `` vide '' de votre disque.
Vous ne pouvez pas «effacer» un fichier sur place, sauf si vous devez effacer la fin. Soit vous contenter de remplacer une valeur «vide», soit lire les parties du fichier qui vous intéressent et l'écrire dans un autre fichier.
ok comment l'écraser sans donner de valeur poubelle? Je veux dire, supposons qu'une longueur de chaîne de 9 soit là et que je l'écrase avec une longueur de chaîne de 6. cela signifierait 3 valeurs de déchets rt?
Hick
Correct. De plus, vous devrez avoir un moyen d'identifier à n'importe quel lecteur le fait que ces 3 caractères sont des ordures.
Ignacio Vazquez-Abrams
le fait est que mon code est réparti entre python et c ++. donc si une lecture de fichier est faite en C ++ et une écriture de fichier en python .. à la fois le temps que le fichier doit être effacé ..
Hick
0
Les fichiers texte étant séquentiels, vous ne pouvez pas effacer directement les données qu'ils contiennent. Vos options sont:
La méthode la plus courante consiste à créer un nouveau fichier. Lisez le fichier d'origine et écrivez tout sur le nouveau fichier, sauf la partie que vous souhaitez effacer. Lorsque tout le fichier a été écrit, supprimez l'ancien fichier et renommez le nouveau fichier pour qu'il ait le nom d'origine.
Vous pouvez également tronquer et réécrire le fichier entier à partir du point que vous souhaitez modifier. Recherchez le point que vous souhaitez modifier et lisez le reste du fichier en mémoire. Revenez au même point, tronquez le fichier et réécrivez le contenu sans la partie que vous souhaitez effacer.
Une autre option simple consiste à remplacer les données par une autre donnée de même longueur. Pour cela, cherchez la position exacte et écrivez les nouvelles données. La limitation est qu'il doit avoir exactement la même longueur.
Regardez la méthode seek/ truncatefunction / pour implémenter l'une des idées ci-dessus. Python et C ont tous deux ces fonctions.
je veux juste effacer tout le fichier depuis le début
Hick
2
Ensuite, supprimez simplement le fichier. Utilisez os.removeou os.unlinken python, ou unlinken C. Une autre option consiste simplement à rouvrir le fichier pour l'écriture ou l'utilisation truncate.
nosklo
0
Écriture et lecture du contenu d'un fichier
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
bien sûr, c'est une très mauvaise façon d'effacer un fichier car cela nécessite tellement de lignes de code, mais je viens de l'écrire pour vous montrer que cela peut également être fait dans cette méthode.
Réponses:
En python:
Ou bien, si vous avez déjà un fichier ouvert:
En C ++, vous pouvez utiliser quelque chose de similaire.
la source
#include<fstream>
puis àstd::ofstream("file.txt");
peu près aussi court qu'en Python. :)f.seek(0)
aprèsf.truncate(0)
, sinon vous aurez un \ x00 bizarre ajouté au début du fichier.Pas une réponse complète mais plutôt une extension de la réponse d'Ondra
Lorsque vous utilisez
truncate()
(ma méthode préférée), assurez-vous que votre curseur est à la position requise. Lorsqu'un nouveau fichier est ouvert en lecture,open('FILE_NAME','r')
son curseur est à 0 par défaut. Mais si vous avez analysé le fichier dans votre code, assurez-vous de pointer à nouveau au début du fichier, c'est-à-dire quetruncate(0)
par défauttruncate()
tronque le contenu d'un fichier à partir de la position actuelle du cusror.Un exemple simple
la source
L'ouverture d'un fichier en mode "écriture" l'efface, vous n'avez pas à y écrire spécifiquement:
(vous devez le fermer car le moment auquel le fichier se ferme automatiquement peut être spécifique à l'implémentation)
la source
De l'utilisateur @jamylak, une forme alternative de
open("filename","w").close()
isla source
Lors de l'utilisation
with open("myfile.txt", "r+") as my_file:
, j'obtiens d'étranges zérosmyfile.txt
, d'autant plus que je lis le fichier en premier. Pour que cela fonctionne, j'ai d'abord dû changer le pointeur demy_file
vers le début du fichier avecmy_file.seek(0)
. Ensuite, je pourrais fairemy_file.truncate()
pour effacer le fichier.la source
Vous devez écraser le fichier. En C ++:
la source
close()
appel. Le destructeur fermera le fichier. Il vous suffit donc de créer un temporaire:ofstream("test.txt");
Attribuer le pointeur de fichier à null dans votre programme supprimera simplement cette référence au fichier. Le fichier est toujours là. Je pense que la
remove()
fonction dans le cstdio.h
est ce que vous recherchez là-bas. Pas sûr de Python.la source
Si la sécurité est importante pour vous, ouvrir le fichier pour l'écrire et le refermer ne suffira pas. Au moins certaines des informations seront toujours sur le périphérique de stockage et pourront être trouvées, par exemple, à l'aide d'un utilitaire de récupération de disque.
Supposons, par exemple, que le fichier que vous effacez contient des mots de passe de production et doit être supprimé immédiatement après la fin de l'opération en cours.
Le remplissage à zéro du fichier une fois que vous avez fini de l'utiliser permet de garantir la destruction des informations sensibles.
Sur un projet récent, nous avons utilisé le code suivant, qui fonctionne bien pour les petits fichiers texte. Il écrase le contenu existant avec des lignes de zéros.
Notez que le remplissage nul ne garantira pas votre sécurité. Si vous êtes vraiment inquiet, vous feriez mieux de ne rien remplir et d' utiliser un utilitaire spécialisé comme File Shredder ou CCleaner pour nettoyer l'espace `` vide '' de votre disque.
la source
Vous ne pouvez pas «effacer» un fichier sur place, sauf si vous devez effacer la fin. Soit vous contenter de remplacer une valeur «vide», soit lire les parties du fichier qui vous intéressent et l'écrire dans un autre fichier.
la source
Les fichiers texte étant séquentiels, vous ne pouvez pas effacer directement les données qu'ils contiennent. Vos options sont:
Regardez la méthode
seek
/truncate
function / pour implémenter l'une des idées ci-dessus. Python et C ont tous deux ces fonctions.la source
os.remove
ouos.unlink
en python, ouunlink
en C. Une autre option consiste simplement à rouvrir le fichier pour l'écriture ou l'utilisationtruncate
.Écriture et lecture du contenu d'un fichier
Cela a fonctionné pour moi
la source
Vous pouvez également utiliser ceci (basé sur quelques-unes des réponses ci-dessus):
bien sûr, c'est une très mauvaise façon d'effacer un fichier car cela nécessite tellement de lignes de code, mais je viens de l'écrire pour vous montrer que cela peut également être fait dans cette méthode.
bon codage!
la source