J'ai besoin d'obtenir un répertoire parent à partir de fichier en C ++:
Par exemple: p>
entrée: p> sortie: p> Je peux le faire avec une fonction: p> mais, je veux juste savoir qu'il existe une fonction intégrée.
J'utilise VC ++ 2003. P> Merci d'avance. P> P>
7 Réponses :
Modification d'une chaîne constante est un comportement indéfini, alors déclarez quelque chose comme ci-dessous:
*(strrchr(str, '\\') + 1) = 0; // put extra NULL check before if path can have 0 '\' also
Si vous utilisez STD :: String au lieu d'un tableau de caractères de style C, vous pouvez utiliser String :: Find_Last_of et String :: SUBSTR A > De la manière suivante:
J'aime cette réponse, mais je pense qu'il a besoin d'adresse string :: npos code> étant retourné si un séparateur de répertoires n'est pas trouvé. Donc, si un séparateur de répertoires est trouvé, alors quel est le chemin du répertoire parent fini par le chemin du fichier. Je pense que
string :: npos code> doit être vérifié et
. Code> est retourné si un séparateur n'a pas été trouvé.
Une manière robuste et transversale serait d'utiliser boost :: Système de fichiers :: parent_path () . Mais évidemment, cela ajoute des frais généraux que vous ne pouvez pas désirer.
Vous pouvez également utiliser
sur les systèmes conformes à POSIX (* NIX) Il existe une fonction couramment disponible pour ce La fonction _splitPath brise un chemin
dans ses quatre composants. P>
blockQquote> donc le résultat (c'est ce que je pense que vous recherchez) serait dans Voici un exemple : p> DirName (3) code>. Sous Windows, il y a
_splitpath code>
.
dir code>. p>
Vous pouvez utiliser DirName pour obtenir le répertoire parent Cochez cette case lien pour plus d'informations p>
raghu p>
sur les plates-formes Windows, vous pouvez utiliser pathremovefileespec ou < Un href = "https://msdn.microsoft.com/en-us/library/windows/desktop/hh707092(v=vs.85).aspx" rel = "Nofollow NOREFERRER"> PATHCCHREMOVEFILESPEC pour y parvenir. Cependant, pour la portabilité, j'irais avec les autres approches qui sont suggérées ici. P>
Maintenant, avec C ++ 17 est possible d'utiliser STD: : Système de fichiers :: chemin :: parent_path code>
: