2017-07-19 2 views
0

J'utilise boost::filesystem pour créer un dossier vide (sous Windows). Disons que le nom du dossier que je veux créer est Nouveau dossier. Lorsque j'exécute le programme suivant, un nouveau dossier avec le nom requis est créé, comme prévu. Lorsque l'exécution du programme pour la deuxième fois, je veux créer nouveau dossier (2). Bien que ce soit une attente déraisonnable, c'est ce que je veux accomplir. Quelqu'un peut-il me guider?Comment créer un nouveau dossier en utilisant boost lorsqu'un dossier portant le même nom existe déjà?

#include <boost/filesystem.hpp> 
int main() 
{ 
    boost::filesystem::path dstFolder = "New Folder"; 
    boost::filesystem::create_directory(dstFolder); 
    return 0; 
} 

Sortie prévue:

Expected output

Répondre

2

Il devrait être facile à accomplir ce que vous voulez sans utiliser quoi que ce soit la plate-forme spécifique ...

std::string dstFolder = "New Folder"; 
std::string path(dstFolder); 

/* 
* i starts at 2 as that's what you've hinted at in your question 
* and ends before 10 because, well, that seems reasonable. 
*/ 
for (int i = 2; boost::filesystem::exists(path) && i < 10; ++i) { 
    std::stringstream ss; 
    ss << dstFolder << "(" << i << ")"; 
    path = ss.str(); 
} 

/* 
* If all attempted paths exist then bail. 
*/ 
if (boost::filesystem::exists(path)) 
    throw something_appropriate; 

/* 
* Otherwise create the directory. 
*/ 
boost::filesystem::create_directory(path); 
0

Cela ne peut évidemment pas être réalisé en utilisant seul coup de fouet. Vous devez vérifier si le dossier existe et générer manuellement de nouveaux noms. Sous Windows, vous pouvez utiliser les fonctions shell PathMakeUniqueName et PathYetAnotherMakeUniqueName à cette fin.

+1

_Vous besoin de vérifier si le dossier existe et générer manuellement nouvelle names_ ... et ce qui vous empêche de le faire exactement en utilisant boost? – zett42

+0

@ zett42 Je suppose qu'en utilisant * boost * les gens veulent dire * appeler cette fonction boost *. Bien sûr, rien n'empêche quelqu'un de mettre en œuvre une telle fonction lui-même. – VTT