Есть ли способ использовать стандартную библиотеку c или С++ для создания каталога, включая вложенные папки, которые могут потребоваться с учетом строки абсолютного пути?
Спасибо
Есть ли способ использовать стандартную библиотеку c или С++ для создания каталога, включая вложенные папки, которые могут потребоваться с учетом строки абсолютного пути?
Спасибо
Нет, однако, если вы хотите использовать boost:
boost::filesystem::path dir("absolute_path");
boost::filesystem::create_directory(dir);
Существует предложение , чтобы добавить библиотеку файловой системы в стандартную библиотеку, которая будет основана на boost::filesystem
. Использование boost::filesystem
и соответствующих typedefs позволит вам перейти в будущий стандарт, когда он станет доступен для вашего компилятора.
Используя стандартную библиотеку, вы сделали бы это так на С++:
// ASSUMED INCLUDES
// #include <string> // required for std::string
// #include <sys/types.h> // required for stat.h
// #include <sys/stat.h> // no clue why required -- man pages say so
std::string sPath = "/tmp/test";
mode_t nMode = 0733; // UNIX style permissions
int nError = 0;
#if defined(_WIN32)
nError = _mkdir(sPath.c_str()); // can be used on Windows
#else
nError = mkdir(sPath.c_str(),nMode); // can be used on non-Windows
#endif
if (nError != 0) {
// handle your error here
}
Да, в С++ 17, вы можете использовать filesystem
#include <filesystem>
#if __cplusplus < 201703L // If the version of C++ is less than 17
// It was still in the experimental:: namespace
namespace fs = std::experimental::filesystem;
#else
namespace fs = std::filesystem;
#endif
int main()
{
// create multiple directories/sub-directories.
fs::create_directories("SO/1/2/a");
// create only one directory.
fs::create_directory("SO/1/2/b");
// remove the directory "SO/1/2/a".
fs::remove("SO/1/2/a");
// remove "SO/2" with all its sub-directories.
fs::remove_all("SO/2");
}
Примечание, чтобы использовать только косые черты вперед /
и вам может потребоваться включить <experimental/filesystem>
.