如果已存在同名文件夹,如何使用boost创建新文件夹?

时间:2017-07-19 17:05:24

标签: c++ windows boost directory boost-filesystem

我正在使用boost::filesystem创建一个空文件夹(在Windows中)。假设我要创建的文件夹的名称是新建文件夹。当我运行以下程序时,将按预期创建具有所需名称的新文件夹。当第二次运行程序时,我想要创建新文件夹(2)。虽然这是一种不合理的期望,但这就是我想要实现的目标。有人可以指导我吗?

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

预期输出:

Expected output

2 个答案:

答案 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上,您可以使用PathMakeUniqueNamePathYetAnotherMakeUniqueName shell函数来实现此目的。