Comment puis-je copier un répertoire à l'aide de Boost système de fichiers
Comment puis-je copier un répertoire à l'aide de Boost système de fichiers?
J'ai essayé de boost::filesystem::copy_directory (), mais qui ne crée que le répertoire cible et de ne pas copier le contenu.
- boost::filesystem::copie de la copie des répertoires ou des fichiers comme. Vous pouvez écrire un algorithme récursif qui copie les répertoires et fichiers dans l'aide que.
- Ah. Je vous remercie. Je suis surprise que ce n'est pas une partie de boost::filesystem. Aussi, je ne pouvais pas trouver toute la documentation de la bibliothèque Boost site qui le dit en anglais que la fonction copy_directory la réalité.
Vous devez vous connecter pour publier un commentaire.
Utilisation:
copyDir(boost::filesystem::path("/home/nijansen/test"), boost::filesystem::path("/home/nijansen/test_copy"));
(Unix)copyDir(boost::filesystem::path("C:\\Users\\nijansen\\test"), boost::filesystem::path("C:\\Users\\nijansen\\test2"));
(Windows)Autant que je le vois, le pire qui peut arriver c'est que rien ne se passe, mais je ne promets rien! Utilisez à vos propres risques.
Veuillez noter que le répertoire que vous effectuez la copie ne doit pas exister. Si les répertoires dans le répertoire que vous essayez de copie ne peut pas être lu (pensez à la gestion des droits), ils seront ignorés, mais les autres doivent encore être copiés.
Mise à jour
Refait la fonction respective pour les commentaires. En outre, la fonction renvoie un résultat réussi. Il sera de retour
false
si les exigences pour les répertoires ou n'importe quel répertoire dans le répertoire source ne sont pas remplies, mais pas si un seul fichier ne peut pas être copié.std::cerr
au lieu defprintf
etstderr
. Et aussi, car c'est coup de pouce.Système de fichiers, vous devez utiliserboost::path
au lieu destd::string
.copyDir(boost::filesystem::path("."), boost::filesystem::path("test"))
, il se copie lui-même jusqu'à ce qu'il soit résilié en raison de la longueur de chemin d'accès dépasse la limite, ou vous manquez d'espace disque.Depuis C++17 vous n'avez pas besoin de coup de pouce pour cette opération en tant que système de fichiers a été ajouté à la norme.
Utilisation
std::filesystem::copie
Voir aussi
std::filesystem::copy_options
.Je vois cette version comme une version améliorée de @nijansen de réponse. Il prend également en charge la source et/ou destination répertoires relatif.
Les principales différences sont les exceptions à la place des valeurs de retour, l'utilisation de
recursive_directory_iterator
etboost::replace_first
à la bande de la partie courante de l'itérateur chemin, et en s'appuyant surboost::filesystem::copy()
de faire la bonne chose avec différents types de fichiers (en conservant les liens symboliques, par exemple).C'est un non-Boost version que je suis en utilisant basé sur Doineann du code. Je suis en utilisant std::système de fichiers, mais ne pouvait pas utiliser un simple
fs::copy(src, dst, fs::copy_options::recursive);
parce que j'ai voulu filtrer les fichiers qui sont copiés par une extension de fichier à l'intérieur de la boucle.relstr.erase(0, std::wstring(src).size());
est un coup de pouce en moins de remplacement pour le boost::replace_first() appel dans l'autre réponse