2010-05-04 6 views
1

J'ai un fichier qui décrit les données d'entrée, qui sont divisées en plusieurs autres fichiers. Dans mon fichier de descripteur, je donne d'abord le chemin A qui indique où tous les autres fichiers sont trouvés.Composer le chemin (avec boost :: filesystem)

L'expéditeur peut définir un chemin relatif (à l'emplacement du fichier descripteur) ou absolu.

Lorsque mon programme est appelé, l'utilisateur donne le nom du fichier descripteur. Il peut ne pas être dans le répertoire de travail en cours, de sorte que le nom de fichier B donné peut également contenir des répertoires.

Pour que mon programme trouve toujours les fichiers d'entrée au bon endroit, je dois combiner ces informations. Si le chemin A est absolu, je n'ai besoin que de celui-là. Si c'est relatif, je dois le concaténer au chemin B (c'est-à-dire la partie de répertoire du nom de fichier). Je pensais que le boost::filesystem::complete pourrait faire le travail pour moi. Malheureusement, il semble que ce ne l'est pas. Je n'ai pas non plus compris comment tester si un chemin donné est absolu ou non.

Des idées?

Répondre

2

En fait, j'ai été assez mal orienté en premier mais maintenant trouvé la solution moi-même. Lorsque « base » contient le chemin A, B et nom de fichier contient:

boost::filesystem::path basepath(base), filepath(filename); 
if (!basepath.is_complete()) 
    basepath = filepath.remove_leaf() /= basepath; 
base = basepath.string(); 

Il fonctionne avec Linux au moins (où il serait très facile de le faire sans coup de pouce, mais oh bien ..), ont encore tester avec Windows.

Questions connexes