Comment supprimer tous les fichiers dans un dossier, mais pas de les supprimer du dossier à l'aide NIX bibliothèques standard?
Je suis en train de créer un programme qui supprime le contenu du dossier /tmp, je suis à l'aide de C/C++ sous linux.
system("exec rm -r /tmp")
supprime tout le dossier, mais il supprime le dossier que je ne veux pas.
Est-il possible de faire cela par une sorte de script bash, appelé par system()
; ou est-il une façon directe, je peux le faire en C/C++?
Ma question est similaire à celui-ci, mais je ne suis pas sur OS X... comment supprimer tous les fichiers dans un dossier, mais pas le dossier lui-même?
rm -r /tmp/*
va supprimer le contenu du dossier.Si vous souhaitez investir dans l'avenir, vous pouvez utiliser
boost::filesystem
à parcourir et supprimer chaque.Euh... qui va supprimer tous les visible fichiers dans le dossier (c'est à dire ceux qui
*
s'étend à d'), mais ne supprimez pas les fichiers commençant par .
Oh ouais, bon point.
Sur une note de côté pourrait supprimer le contenu de /tmp nuire à quoi que ce soit?
OriginalL'auteur Finding Nemo 2 is happening. | 2012-06-13
Vous devez vous connecter pour publier un commentaire.
En C/C++, vous pouvez faire:
De Bash, vous pouvez faire:
Cela va effacer tout à l'intérieur de /tmp, mais ce n'est pas /tmp lui-même.
Euh... qui va supprimer tous les fichiers dans le dossier (c'est à dire ceux qui étend à l'), mais ne supprimez pas les fichiers commençant par .
Tout appel au "système" de C n'est pas sûr. securecoding.cert.org/confluence/pages/...
Je suis d'accord. Cependant, puisque vous downvoted) gardez à l'esprit que l'OP demander, "...Est-il possible de faire cela par une sorte de script bash, appelé via le système..."
Lire attentivement la prochaine fois ou est-il une façon directe, je peux le faire en C/C++?.
OriginalL'auteur Jay Sullivan
Vous ne voulez pas lancer un nouveau shell via
system()
ou quelque chose comme ça - c'est beaucoup de frais généraux à faire quelque chose de très simple et il fait des hypothèses inutiles (et dépendances) à propos de ce qui est disponible sur le système.La meilleure réponse 🙂
Le code ne compile pas
vous voulez probablement pour définir
if (0==strcmp(next_file->d_name, ".") || 0==strcmp(next_file->d_name, "..")) { continue; }
au début de l'instruction while si vous ne souhaitez pas supprimer les fichiers "." et ".."OriginalL'auteur Demitri
vous pouvez faire
vous êtes de droite. J'ai édité ma réponse en conséquence.
Tout appel Système n'est pas sûr securecoding.cert.org/confluence/pages/...
OriginalL'auteur ALiX
en utilisant utiliser le caractère générique
*
caractère que vous pouvez supprimer tous les fichiers avec une extension.system("exec rm -r /tmp/*")
OriginalL'auteur eqzx
En C/C++, vous pouvez utiliser (y compris les répertoires cachés):
Mais que faire si 'rm' ou 'trouver' les utilitaires ne sont pas disponibles pour les poissons?, mieux aller " ftw " et "supprimer":
OriginalL'auteur cmllamas
Je réalise que c'est une très vieille question, mais en s'appuyant sur Demitri de la grande réponse, j'ai créé une fonction qui va la suppression récursive de fichiers dans des sous-dossiers, si désiré
Il ne certains erreur de manipulation, qu'il passe en arrière errno. L'en-tête de fonction est écrite pour l'analyse par doxygen. Cette fonction fonctionne dans l'exemple simple des cas que j'ai utilisé, et supprime les fichiers cachés et les fichiers cachés.
J'espère que cela aide quelqu'un d'autre dans l'avenir
OriginalL'auteur andrew
Vous pouvez utiliser nftw(3). Tout d'abord, faire une passe à recueillir l'ensemble des chemins d'accès aux fichiers à supprimer. Ensuite, utilisez
unlink
(pour les non-répertoires) et rmdir(2) dans un second passageOriginalL'auteur Basile Starynkevitch