[英]How to create a new folder using boost when a folder with the same name already exists?
I am using boost::filesystem
to create an empty folder (in Windows). 我正在使用boost::filesystem
创建一个空文件夹(在Windows中)。 Let say that the name of the folder that I want to create is New Folder . 假设我要创建的文件夹的名称是New Folder 。 When I run the following program, a new folder with the required name is created, as expected. 当我运行以下程序时,将按预期方式创建一个具有所需名称的新文件夹。 When the run the program for the second time, I want New Folder (2) to be created. 当第二次运行该程序时,我希望创建新文件夹(2) 。 Though it is an unreasonable expectation, that is what I want to achieve. 尽管这是不合理的期望,但这是我想要实现的目标。 Can someone guide me? 有人可以指导我吗?
#include <boost/filesystem.hpp>
int main()
{
boost::filesystem::path dstFolder = "New Folder";
boost::filesystem::create_directory(dstFolder);
return 0;
}
Expected output: 预期产量:
It should be easy to accomplish what you want without using anything platform specific... 无需使用任何特定于平台的平台即可轻松实现所需的目标...
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);
This clearly can not be achieved using boost alone. 显然,仅使用boost无法实现。 You need to check whether folder exists and manually generate new names. 您需要检查文件夹是否存在并手动生成新名称。 On Windows you can use PathMakeUniqueName
and PathYetAnotherMakeUniqueName
shell functions for this purpose. 在Windows上,可以PathMakeUniqueName
使用PathMakeUniqueName
和PathYetAnotherMakeUniqueName
Shell函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.