createfiles.cpp

The following code example is taken from the book
C++17 - The Complete Guide by Nicolai M. Josuttis, Leanpub, 2017
The code is licensed under a Creative Commons Attribution 4.0 International License. Creative Commons License


#include <iostream>
#include <fstream>
#include <filesystem>

int main ()
{
  namespace fs = std::filesystem;
  try {
    // create tmp/test:
    fs::path tmpDir{"tmp"};
    fs::path testPath{tmpDir / "test"};

    // create directories if they don't exist yet:
    if (!create_directories(testPath)) {
      std::cout << "test directory " << testPath << " already exists\n";
    }
     
    // create data file tmp/test/data.txt:
    testPath /= "data.txt";
    std::ofstream dataFile{testPath};
    if (!dataFile) {
      std::cerr << "OOPS, can't open " << testPath << '\n';
    }
    dataFile << "The answer is 42\n";

    // create local symbolic link to tmp/test:
    fs::path symlink{"testdir"};
    if (!is_symlink(symlink)) {
      create_directory_symlink(testPath, symlink);
    }

    // recursively list all files (also following symlinks)
    std::cout << "all files:\n";
    auto iterOpts{fs::directory_options::follow_directory_symlink};
    for (const auto& e : fs::recursive_directory_iterator(".", iterOpts)) {
      std::cout << "  " << e.path().lexically_normal().string() << '\n'; 
    }
  } 
  catch (fs::filesystem_error& e) {
    std::cerr << "exception: " << e.what() << '\n';
    std::cerr << "           path1: " << e.path1() << '\n';
  }
}