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

24,126

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);
Share:
24,126
progammer
Author by

progammer

Hello World

Updated on July 20, 2020

Comments

  • progammer
    progammer almost 4 years

    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:

    Expected output

  • zett42
    zett42 almost 7 years
    You need to check whether folder exists and manually generate new names ... and what exactly prevents you from doing that using boost?
  • user7860670
    user7860670 almost 7 years
    @zett42 I assume that by using boost people mean calling this boost function. Of course nothing prevents someone from implementing such function himself.