Booster la vérification de l'inclusion du système de fichiers 3
-
12-11-2019 - |
Question
J'utilise la bibliothèque Boost FileSystem et j'ai deux chemins, je dois savoir s'il existe un moyen élégant de vérifier si Path1 est un enfant de Path2 (par exemple Path1 = / USR / local, path2 = / usr). Je peux le faire en utilisant des fonctions de chaîne, mais je me demandais s'il existe un moyen d'utiliser Boost FileSystem Fonctions. Je pourrais le faire avec des itérateurs de chemin, c'est le seul moyen? Y a-t-il une fonction d'assistance qui vérifie cette vérification? J'ai cherché sur la documentation mais je n'ai rien trouvé. Merci
La solution
*path1.begin() == *path2.begin()
Cela signifie cependant que "c: / foo" partage une base avec "c: / bar", qui pourrait être involontaire.
for( boost::filesystem::path::iterator itrLeft( path1.begin() ), itrRight( path2.begin() ); *itrLeft == *itrRight && itrLeft != path1.end() && itrRight != path2.end(); ++itrLeft, ++itrRight )
De cette façon, vous pouvez voir combien d'atomes correspondent, je suggère d'utiliser Boost :: Filesystem :: Absolue d'abord si vous voulez le rendre robuste.