C言語

【C言語】第7章第15回:ファイルシステムAPIの利用

ファイルシステムAPIを使用することで、ファイルやディレクトリの操作がより柔軟に行えます。本記事では、C言語でファイルシステムAPIを利用する方法とその実践的な応用例を学びます。

0. 記事の概要

この記事を読むメリット

  • 柔軟なファイル操作:ファイルやディレクトリを効率的に操作できます。
  • プロジェクトへの応用:ファイル管理機能を持つプログラムを設計できます。
  • OS間の互換性:クロスプラットフォーム対応のコードが書けるようになります。

この記事で学べること

  • ファイルの作成・削除
  • ディレクトリの操作
  • ファイルのプロパティ取得

活用のイメージ

例えば、ファイル管理ツールやバックアップスクリプトなどで、これらの技術が活用されます。

1. ファイル操作の基本

1.1 ファイルの作成と削除

ファイルの作成にはfopen()、削除にはremove()を使用します。

#include <stdio.h>

int main() {
    // ファイルを作成
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        perror("Error creating file");
        return 1;
    }
    fprintf(file, "Hello, World!\n");
    fclose(file);
    printf("File created successfully.\n");

    // ファイルを削除
    if (remove("example.txt") == 0) {
        printf("File deleted successfully.\n");
    } else {
        perror("Error deleting file");
    }

    return 0;
}
動作解説
  1. ファイルの作成:fopen()を使用して新しいファイルを作成します。
  2. データの書き込み:fprintf()でデータをファイルに書き込みます。
  3. ファイルの削除:remove()を使用してファイルを削除します。

2. ディレクトリ操作

2.1 ディレクトリの作成と削除

ディレクトリの作成にはmkdir()、削除にはrmdir()を使用します。

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

int main() {
    // ディレクトリを作成
    if (mkdir("example_dir", 0755) == 0) {
        printf("Directory created successfully.\n");
    } else {
        perror("Error creating directory");
    }

    // ディレクトリを削除
    if (rmdir("example_dir") == 0) {
        printf("Directory deleted successfully.\n");
    } else {
        perror("Error deleting directory");
    }

    return 0;
}
ポイント
  • mkdir()の第2引数でパーミッションを指定可能
  • ディレクトリを削除する際、空でないとrmdir()は失敗する

3. ファイルプロパティの取得

3.1 ファイル情報を表示

stat()を使用して、ファイルのプロパティを取得します。

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

int main() {
    struct stat fileStat;

    if (stat("example.txt", &fileStat) == 0) {
        printf("File Size: %ld bytes\n", fileStat.st_size);
        printf("Number of Links: %ld\n", fileStat.st_nlink);
        printf("File Permissions: %o\n", fileStat.st_mode & 0777);
    } else {
        perror("Error retrieving file properties");
    }

    return 0;
}
動作解説
  1. ファイルの情報取得:stat()を使用して、ファイルサイズやパーミッションなどの情報を取得します。
  2. 情報の表示:取得したプロパティをprintf()で出力します。

4. 練習問題

以下の課題に挑戦して、ファイルシステムAPIのスキルを向上させましょう。

  1. ファイルの存在をチェックし、存在する場合はサイズを表示するプログラムを作成してください。
  2. 指定したディレクトリ内のすべてのファイルを列挙するプログラムを作成してください。
  3. ファイルの作成日を表示するプログラムを作成してください。

5. 練習問題の解答と解説

問1の解答

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

int main() {
    const char *filename = "example.txt";
    struct stat fileStat;

    if (stat(filename, &fileStat) == 0) {
        printf("File '%s' exists.\n", filename);
        printf("Size: %ld bytes\n", fileStat.st_size);
    } else {
        printf("File '%s' does not exist.\n", filename);
    }

    return 0;
}

このプログラムでは、stat()を使用してファイルの存在をチェックし、存在する場合はそのサイズを表示します。

6. まとめ

本記事では、C言語でファイルシステムAPIを使用してファイルやディレクトリを操作する方法を学びました。これらのスキルを活用して、より高度なファイル管理システムを構築してください。