C++ でディレクトリを作成する
-
C++ で
std::filesystem::create_directory
関数を使用してディレクトリを作成する -
C++ で
std::filesystem::create_directories
関数を使用してディレクトリを作成する
この記事では、C++ でディレクトリを作成する方法のいくつかの方法について説明します。
C++ で std::filesystem::create_directory
関数を使用してディレクトリを作成する
C++ 17 バージョン以降、標準ライブラリは、Boost ライブラリの一部として最初に実装されたファイルシステム操作インターフェイスを提供します。すべてのファイルシステム機能は、std::filesystem
名前空間で提供されていることに注意してください。これは、次の例では fs
としてエイリアスされています。create_directory
関数は、現在の作業ディレクトリに新しいディレクトリを作成するために使用されます。この関数は、タイプ std::filesystem::path
の必須引数を 1つ取ります。これは、文字列オブジェクトとして渡すこともでき、適切な初期化が自動的に行われます。
#include <filesystem>
#include <iostream>
using std::cout;
using std::endl;
using std::string;
using std::system;
namespace fs = std::filesystem;
int main() {
string directory_name("tmp_dir");
fs::create_directory(directory_name)
? cout << "created directory - " << directory_name << endl
: cout << "create_directory() failed" << endl;
return EXIT_SUCCESS;
}
成功した関数呼び出しは、create_directory
の戻り値で確認できます。戻り値は true
と評価されます。作成されたディレクトリは、同じディレクトリパスを使用する std::filesystem::remove
呼び出しで削除できることに注意してください。create_directory
はオプションで 2つのパスの引数を取ることができます。2 番目の引数は既存のディレクトリである必要があり、新しく作成されたディレクトリは前のディレクトリの属性をコピーします。
#include <filesystem>
#include <iostream>
using std::cout;
using std::endl;
using std::string;
using std::system;
namespace fs = std::filesystem;
int main() {
string directory_name("tmp_dir");
fs::create_directory(directory_name)
? cout << "created directory - " << directory_name << endl
: cout << "create_directory() failed" << endl;
fs::remove(directory_name);
return EXIT_SUCCESS;
}
C++ で std::filesystem::create_directories
関数を使用してディレクトリを作成する
もう 1つの便利な関数は std::filesystem::create_directories
です。これは、すべて単一のパス引数で指定された複数のネストされたディレクトリを作成できます。次のサンプルコードでは、この関数を使用して 4 レベルのネストされたディレクトリを作成し、次にルートディレクトリを最初のディレクトリと共有する別のディレクトリを作成します。ただし、最後のレベルのディレクトリ名がすでに存在する場合、関数は false
を返すことに注意してください。
#include <filesystem>
#include <iostream>
using std::cout;
using std::endl;
using std::string;
using std::system;
namespace fs = std::filesystem;
int main() {
string directory_tree = "x_tmp/level1/level2/level3";
string directory_tree2 = "x_tmp/level1-2/level2-1";
auto ret = fs::create_directories(directory_tree);
if (ret) {
cout << "created directory tree as follows: " << endl;
std::system("tree x_tmp");
} else {
cout << "create_directories() failed" << endl;
}
auto ret2 = fs::create_directories(directory_tree2);
if (ret2) {
cout << "created directory tree as follows: " << endl;
std::system("tree x_tmp");
} else {
cout << "create_directories() failed" << endl;
}
return EXIT_SUCCESS;
}
create_directory
と同様に、この関数も呼び出しが成功したことを示すブール値を返します。削除が必要な場合は、std::filesystem::remove_all
関数をルートディレクトリ名で呼び出すことができ、ツリー全体が削除されます。
#include <filesystem>
#include <iostream>
using std::cout;
using std::endl;
using std::string;
using std::system;
namespace fs = std::filesystem;
int main() {
string directory_tree = "x_tmp/level1/level2/level3";
string directory_tree2 = "x_tmp/level1-2/level2-1";
auto ret = fs::create_directories(directory_tree);
if (ret) {
cout << "created directory tree as follows: " << endl;
std::system("tree x_tmp");
} else {
cout << "create_directories() failed" << endl;
}
auto ret2 = fs::create_directories(directory_tree2);
if (ret2) {
cout << "created directory tree as follows: " << endl;
std::system("tree x_tmp");
} else {
cout << "create_directories() failed" << endl;
}
fs::remove_all(directory_tree.substr(0, directory_tree.find('/')));
return EXIT_SUCCESS;
}