简体   繁体   中英

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). Let say that the name of the folder that I want to create is 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. 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. 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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM