ユーニックス総合研究所

  • home
  • archives
  • c-mkdir-rmdir-stat

C言語でフォルダ作成、削除、存在確認を行う方法【Windows & Linux】

  • 作成日: 2022-01-15
  • 更新日: 2023-12-25
  • カテゴリ: C言語

C言語でフォルダ作成、削除、存在確認を行う

C言語でフォルダの作成削除存在確認を行う方法を解説します。
フォルダの作成にはmkdir()ファミリー、削除にはrmdir()ファミリー、存在確認にはstat()を使います。
コンパイラはGCCを使います。WindowsとLinuxの両方について解説します。

関連記事

目が覚めるC言語のdo-while文の使い方【ループ処理、初心者向け】
明快!C言語のcontinue文の使い方
君はまだC言語のdefineのすべてを知らない【マクロ、プリプロセス】
プログラミングのポインタをわかりやすく解説【C言語】
コードで見るC言語とC++の7つの違い

フォルダ作成

フォルダの作成にはmkdir()ファミリーを使います。
Windowsでは_mkdir(), Linuxではmkdir()を使います。

Windowsでのフォルダ作成

Windows環境でフォルダを作成する_mkdir()は↓のようなインターフェースになっています。

#include <direct.h>  

int _mkdir(const char *folder_name);  

_mkdir()を使うにはdirect.hをインクルードする必要があります。
また_mkdir()は引数に文字列のフォルダ名を取ります。
_mkdir()フォルダの作成に成功すると0を返し、失敗した場合は0以外を返します
↓はWindows環境でフォルダを作成するサンプルプログラムです。

#include <stdio.h>  
#include <direct.h>  

int main(void) {  
    if (_mkdir("win_folder") == 0) {  
        puts("フォルダを作成しました。");  
        return 0;  
    } else {  
        perror("_mkdir");  
        return 1;  
    }  
}  

↑のコードをコンパイルして実行するとwin_folderというフォルダが作成されます。

Linuxでのフォルダ作成

Linux環境でディレクトリを作成するmkdir()は↓のようなインターフェースになっています。

#include <sys/stat.h>  

int mkdir(const char *pathname, mode_t mode);  

Windowsの_mkdir()との違いは作成するディレクトリのモードを指定できる点です。
mkdir()を使うにはsys/stat.hをインクルードする必要があります。
mkdir()ディレクトリの作成に成功すると0を返し、失敗した場合は0以外を返します
第1引数のpathnameにはディレクトリのパス、第2引数のmodeにはモードを指定します。
↓はLinux環境でディレクトリを作成するプログラムです。

#include <stdio.h>  
#include <sys/stat.h>  

int main(void) {  
    if (mkdir("linux_dir",  
                S_IRUSR | S_IWUSR | S_IXUSR |  
                S_IRGRP | S_IWGRP | S_IXGRP |  
                S_IROTH | S_IWOTH | S_IXOTH) == 0) {  
        puts("ディレクトリを作成しました。");  
        return 0;  
    } else {  
        perror("mkdir");  
        return 1;  
    }  
}  

上記のプログラムを実行するとlinux_dirというディレクトリが作成されます。

$ ls -la  
drwxr-xr-x 1 xxx xxx   4096 Xxx xx xx:xx linux_dir  

モードはユーザー、グループ、その他の権限を読み込みと書き込みと実行について指定できます。

S_IRUSR | S_IWUSR | S_IXUSR |  // ユーザーの権限(読み込み、書き込み、実行)  
S_IRGRP | S_IWGRP | S_IXGRP |  // グループの権限(読み込み、書き込み、実行)  
S_IROTH | S_IWOTH | S_IXOTH    // その他の権限(読み込み、書き込み、実行)  

フォルダ削除

フォルダの削除にはrmdir()を使います。
Windows, Linuxでも同じですがインクルードするヘッダーファイルが違っています。

#include <direct.h> (Windows)  
#include <unistd.h> (Linux)  

int rmdir(const char *pathname);  

Windows環境ではdirect.hをインクルードし、Linux環境ではunistd.hをインクルードします。
rmdir()は引数にフォルダのパスを取ります。
フォルダの削除に成功した場合は0を、失敗した場合は0以外を返します

Windowsでのフォルダ削除

↓はWindows環境でフォルダを削除します。

#include <stdio.h>  
#include <direct.h>  

int main(void) {  
    if (rmdir("win_folder") == 0) {  
        puts("フォルダを削除しました。");  
        return 0;  
    } else {  
        perror("rmdir");  
        return 1;  
    }  
}  

↑のプログラムはwin_folderというフォルダが存在する場合は、そのフォルダを削除します。

Linuxでのディレクトリ削除

↓はLinux環境でフォルダを削除します。

#include <stdio.h>  
#include <unistd.h>  

int main(void) {  
    if (rmdir("linux_dir") == 0) {  
        puts("ディレクトリを削除しました。");  
        return 0;  
    } else {  
        perror("rmdir");  
        return 1;  
    }  
}  

↑のプログラムはlinux_dirというディレクトリが存在する場合は、そのディレクトリを削除します。

フォルダ、ファイルの存在確認

フォルダやファイルの存在を確認する、つまりファイルが存在するかどうか調べるにはstat()を使います。
この関数はすばらしいことにWindowsでもLinuxでも同じインターフェース、ヘッダーファイルです。

#include <sys/stat.h>  

int stat(const char *pathname, struct stat *st);  

stat()を使うにはsys/stat.hをインクルードする必要があります。
stat()の第1引数にはファイルのパス、第2引数にはstruct statのポインタを渡します。
stat()はファイルの容量などを調べるときに使われますが、そういった情報がstruct statに保存されます。
stat()ファイルが存在する場合は0を、存在しない場合は0以外を返します

↓はフォルダの存在確認を行うプログラムです。

#include <stdio.h>  
#include <sys/stat.h>  

int main(void) {  
    struct stat st;  

    if (stat("folder", &st) == 0) {  
        puts("フォルダは存在します。");  
    } else {  
        puts("フォルダは存在しません。");  
    }  

    return 0;  
}  

folderというフォルダが存在する場合は↑のプログラムは「フォルダは存在します」と表示します。

おわりに

今回はC言語でフォルダ作成、削除、存在確認する方法を解説しました。
ファイルシステムの操作は良く行われますので覚えておいて損はないですね。

🦝 < フォルダを作成しちゃう

🐭 < そのフォルダを削除しちゃう