LinuxでC++を使ってディレクトリツリーを作成する方法
この記事では、Linux環境においてC++のコードからディレクトリツリー(階層構造を持つディレクトリ)を作成する方法を解説します。
mkdirコマンドの基本
まず、Linuxターミナルでの基本的な方法を確認しましょう。ターミナルでは以下のようなコマンドを実行することで、一括してディレクトリを作成できます。
mkdir -p /dir/dir1/dir2
ここで重要なのが -p オプションです。このオプションを指定すると、親ディレクトリが存在しない場合でも、必要な上位ディレクトリを再帰的に自動作成してくれます。オプションを付け忘れると、親ディレクトリが存在しない場合にエラーとなるため注意が必要です。
C++コードからの実装方法
C++のコードからも同様の処理を行えます。Linuxシステムのライブラリを利用し、system() 関数の引数としてLinuxのターミナルコマンドを文字列として渡すことで、プログラム内からディレクトリツリーを作成できます。
以下に具体的なサンプルコードを示します。
サンプルコード
#include <bits/stdc++.h>
#include <iostream>
#include <sys/stat.h>
#include <sys/types.h>
using namespace std;
int main() {
int status;
status = system("mkdir -p TP/My_Folder/test"); // ディレクトリを作成
if (status == -1)
cerr << "Error : " << strerror(errno) << endl;
else
cout << "Directories are created" << endl;
}
実行結果
Directories are created
このコードでは、カレントディレクトリ直下に「TP」フォルダ、その中に「My_Folder」フォルダ、さらにその中に「test」フォルダという3階層のディレクトリ構造を一度に作成しています。
system() 関数はコマンドの実行結果としてステータス値を返します。-1が返された場合はエラーが発生しているため、strerror(errno) を使ってエラー内容を出力するようにしています。正常終了した場合は「Directories are created」というメッセージが表示されます。
実際にファイルマネージャーや ls コマンドなどで確認してみると、カレントディレクトリの中に指定した階層構造のディレクトリが正しく作成されていることがわかります。
補足:system()関数以外の方法
なお、より安全で移植性の高い方法としては、POSIX関数の mkdir() を各階層ごとに呼び出す方法や、C++17で導入された <filesystem> ライブラリの std::filesystem::create_directories() を使う方法もあります。簡易的な処理には system() 関数が手軽ですが、本格的なアプリケーション開発では標準ライブラリの利用を検討するとよいでしょう。
-
C++でコンソール画面をクリアする方法をわかりやすく解説
C++のプログラムからコンソール(ターミナル)画面に表示された内容を消去したい場合、system()関数を使ってOSのコマンドを実行するのが一般的な方法です。この関数は標準ライブラリ<cstdlib>で定義されており、引数として渡した文字列をシェルコマンドとして実行してくれます。クリアに使うコマンドはOSによって異なります。Linux / macOS:POSIX環境で動作する「clear」コマンドを使用Windows:コマンドプロンプト用の「cls」コマンドを使用Linuxでコンソールをクリアするサンプルコード以下は、Linux環境で「clear」コマンドをsystem()関数に渡
-
Javaでディレクトリ階層を作成する方法|mkdirs()メソッドの使い方を解説
java.ioパッケージに含まれるFileクラスは、システム上のファイルやディレクトリ(パス名)を表現するためのクラスです。このクラスには、ファイルやディレクトリに対してさまざまな操作を行うためのメソッドが数多く用意されています。 mkdir()メソッドを使用すると、現在のFileオブジェクトが表すパスにディレクトリを1つ作成できます。ただし、このメソッドは親ディレクトリが存在しない場合には失敗するという点に注意が必要です。 ディレクトリ階層を作成するには? 複数階層からなる新しいディレクトリ構造を一括で作成したい場合は、同じFileクラスのmkdirs()メソッドを使用します。このメソッドは