Comment faire pour supprimer un répertoire non vide de C++?
En C++, comment puis-je supprimer un répertoire avec tous ses fichiers qu'il contient? Je sais qu'il est rmdir
, mais il ne supprime les répertoires non-vides, donc comment j'ai la liste et supprimer tous les fichiers qu'il contient en premier?
Je sais qu'il ne devrait pas être dur à l'aide de Boost système de fichiers, mais je voudrais éviter de construire et en fonction de cela juste pour cette tâche peu ...
Quelle plate-forme?
Oui, j'ai oublié de mentionner que je suis sur Linux. (Mais rmdir est indépendant de la plate -?) Mais il semble que peut-être il est préférable d'utiliser Boost après tout ...
Si vous voulez vraiment faire de manipulation de fichiers avec C++ utiliser boost. Si des commandes shell sont d'un usage assez
pas exactement "de la plate-forme indendent", mais "couramment utilisé" (c'est à dire, les deux Unix/Linux & DOS, peut-être d'autres-Ne Mac OSX ont une interface de ligne de commande?)
oui, la valeur par défaut utilisé pour être tcsh, mais il a changé de Bash il y a quelques années. La plupart des autres suspects habituels sont disponibles.
rmdir
suggère d'Unix ou de Linux pour moi.Oui, j'ai oublié de mentionner que je suis sur Linux. (Mais rmdir est indépendant de la plate -?) Mais il semble que peut-être il est préférable d'utiliser Boost après tout ...
Si vous voulez vraiment faire de manipulation de fichiers avec C++ utiliser boost. Si des commandes shell sont d'un usage assez
rm -rf [dirname]
.pas exactement "de la plate-forme indendent", mais "couramment utilisé" (c'est à dire, les deux Unix/Linux & DOS, peut-être d'autres-Ne Mac OSX ont une interface de ligne de commande?)
oui, la valeur par défaut utilisé pour être tcsh, mais il a changé de Bash il y a quelques années. La plupart des autres suspects habituels sont disponibles.
OriginalL'auteur Frank | 2010-07-19
Vous devez vous connecter pour publier un commentaire.
Oui, vous avez normalement à supprimer le contenu de la première. Si vous ne voulez pas utiliser Boost pour cela, vous êtes un peu coincé avec l'écriture du code non portable pour rechercher tous les fichiers (par exemple,
FindFirstFile
,FindNextFile
sur Windows,opendir
,readdir
sur Unix et similaires) de manière récursive, et supprimer tous les de la.Sur Windows, vous pouvez également utiliser
ShFileOperation
ou la IFileOperation interface. Ces peut gérer une suppression récursive en interne, de sorte que vous venez de lui donner le nom du répertoire que vous souhaitez supprimer, et il se charge du reste.Comme avec la plupart des COM des choses, la
IFileOperation
interface semble être spécifiquement conçu pour être aussi maladroit que possible (par exemple,IFileOperation::DeleteItem
ne supprime pas réellement quoi que ce soit-qu'il ajoute un élément à une liste de choses à être supprimé. Ensuite, vous devez appelerIFileOperation::PerformOperations
de faire de la suppression effective.OriginalL'auteur Jerry Coffin
Vous pouvez utiliser le code suivant pour supprimer un répertoire non vide. Il utilise Unix-les commandes de style, mais peut être compilé pour Windows avec Cygwin (si vous n'avez pas l'esprit en fonction de la DLL Cygwin).
OriginalL'auteur bta
Tout d'abord, n'importe quel fichier i/o -- en particulier les changements de répertoire, est très bien OS dépendante.
Mais, pour la plupart, c'est une) supprimé les fichiers, puis b) supprimer le répertoire. (aucun raccourci vers qui serait certainement OS dépendante, et souvent de la version d'OS depedent)
OriginalL'auteur James Curran
Vous aurez besoin de faire une boucle sur tous les fichiers dans le répertoire et supprimer ceux du premier. Le code est dépendant de la plate-forme (comme d'autres l'ont mentionné).
Par exemple le code de cette Page MSDN (à partir de ce qui est extrait donc il n'y aura pas défini des variables) fonctionne pour Windows, mais pas sous Unix/Linux:
imprime les informations de fichier, mais en l'adaptant à supprimer ne devrait pas être trop dur.
Vous aurez besoin d'appeler cela de façon récursive pour tous les sous-répertoires dans l'arborescence.
OriginalL'auteur ChrisF