2010-08-16 6 views

Répondre

2

Vous pouvez ouvrir le fichier en mode écriture, puis fermez-le.

+0

comment j'obtiens tous les fichiers dans le répertoire en C – nis

3

En fait, vous avez vraiment ne pas besoin de le faire en C. UNIX comprend des outils qui peuvent faire à peu près toutes les tâches que vous voulez.

find . -type f -exec cp /dev/null {} ';' 

Cet extrait de code ci-dessus en particulier trouver tous les fichiers dans le répertoire en cours et tenter de copier le périphérique null à elle, tronquant efficacement le fichier à 0 octets.

Vous pouvez modifier le répertoire de démarrage (niveau supérieur), restreindre les noms (avec -name '*.jpg' par exemple) et même le restreindre au répertoire actuel (sans sous-répertoires) avec -maxdepth 0.

Il y a beaucoup d'autres options avec find que vous pouvez découvrir en entrant man find dans votre shell de ligne de commande. Il suffit de ne pas entrer dans Google, vous pouvez obtenir plus que vous espériez :-)


Si la nécessité d'utiliser C est une question absolument non négociable, je encore faire de cette façon mais avec:

system ("find . -type f -exec cp /dev/null {} ';'"); 

Je ne suis pas désireux de logiciels réécriture que quelqu'un a déjà mis un bucketload d'efforts pour fournir :-) sans


Si, après mon conseil, vous voulez toujours le faire à la dure, vous devez regarder opendir, readdir et closedir pour le traitement des répertoires, puis simplement utiliser fopen en mode écriture suivi par fclose sur chaque dossier de candidature.

Si vous souhaitez naviguer dans des structures de répertoires entières plutôt que simplement dans le répertoire en cours, vous devez détecter les répertoires de readdir et les parcourir probablement de nouveau.

+0

oui mais mon code est en c – nis

+0

Ensuite, sérieusement, utilisez 'system (" find. -type f -exec cp/dev/null {} ';' "); '. Il y a rarement une bonne raison de réinventer la roue. – paxdiablo

+0

vous pouvez également utiliser 'truncate (filename, 0)' au lieu d'ouvrir/fermer le fichier – Hasturkun

3

Dans Bash:

for i in directory/*; do > $i; done 

Cela permettra de préserver la propriété et les autorisations du fichier.

Ne faites pas de shell dans C! Économisez beaucoup de temps en utilisant le meilleur outil pour le travail. Si c'est un devoir, marquez-le comme tel.

+2

btw, vous n'avez pas besoin d'exécuter echo, 'do> $ i; done' fonctionne aussi bien – Hasturkun

+0

thx, a édité la réponse en conséquence. – ypnos

3
  • scandir leur liste, pour chaque fichier:
  • fopen(, w+)
  • fstat pour obtenir la taille
  • fwrite le fichier entier avec des zéros? (Ce qui est ce que vous entendez par clair?)
  • fclose

Une belle variante de la coque serait: shred -z directory/*

+0

Juste 'scandir()' suivi d'un 'truncate (filename, 0)' sur chaque fichier fera l'affaire. – caf

+0

Eh bien ... cela dépend, si vous voulez le rendre dur (er) à récupérer, alors écrire des données en place est sain. Sinon oui, juste 'truncate()', ou plus conforme 'fopen (fichier," w ") + fclose()' standard fera l'affaire. – domen

+0

Cela ne fera pas de différence avec l'avènement des systèmes de fichiers de copie sur écriture, cependant;) – caf

Questions connexes