当同名文件夹已存在时,如何使用 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);
我正在使用 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);