我正在使用boost::filesystem
创建一个空文件夹(在Windows中)。假设我要创建的文件夹的名称是新建文件夹。当我运行以下程序时,将按预期创建具有所需名称的新文件夹。当第二次运行程序时,我想要创建新文件夹(2)。虽然这是一种不合理的期望,但这就是我想要实现的目标。有人可以指导我吗?
#include <boost/filesystem.hpp>
int main()
{
boost::filesystem::path dstFolder = "New Folder";
boost::filesystem::create_directory(dstFolder);
return 0;
}
预期输出:
答案 0 :(得分:4)
如果不使用任何特定平台,应该很容易实现您想要的......
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);
答案 1 :(得分:0)
单独使用增压显然无法实现。您需要检查文件夹是否存在并手动生成新名称。在Windows上,您可以使用PathMakeUniqueName
和PathYetAnotherMakeUniqueName
shell函数来实现此目的。