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

How to create a new folder using boost when a folder with the same name already exists?

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

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

预期输出:

这显然不能单独使用 boost 来实现。您需要检查文件夹是否存在并手动生成新名称。在 Windows 上,您可以为此目的使用 PathMakeUniqueName and PathYetAnotherMakeUniqueName shell 函数。

无需使用任何平台特定的东西就可以很容易地完成你想要的...

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);