プログラミングにおけるファイル操作の基本

1. ファイルの概要

コンピュータ上のファイルは、プログラムファイルとデータファイルに大別されます。プログラムファイルはコンパイル可能なソースコードや実行可能形式を指します。

2. ファイル形式の分類

  • プログラムファイル: ソースファイル(.c)、オブジェクトファイル(Windows:.obj/Linux:.o)、実行ファイル(.exe)
  • データファイル: テキスト形式とバイナリ形式に分類されます

3. データ保存形式の違い

テキストファイルはASCIIコードで保存され、バイナリファイルはメモリ上の2進表現をそのまま保存します。

// 例:数値12345の保存形式
テキスト形式: 31 32 33 34 35(ASCII文字列"12345")
バイナリ形式: 30 39 00 00(32ビット整数の16進表現)

4. ファイル操作の基本

ファイル操作には以下のプロセスが必要です:

  1. fopen()でファイルを開く
  2. fread()/fwrite()等でデータ処理
  3. fclose()でファイルを閉じる

5. ファイルポインタの役割

FILE構造体を指すポインタを通じてファイル操作を行います。Windows環境では以下のように使います:

FILE *fp = fopen("data.txt", "r");
if (fp) {
    // ファイル処理
    fclose(fp);
}

6. 順次アクセス操作

文字単位の読み書き:

// 文字書き込み例
FILE *fp = fopen("output.txt", "w");
fputc('A', fp);
fclose(fp);

// 読み込み例
FILE *fp = fopen("input.txt", "r");
int ch;
while ((ch = fgetc(fp)) != EOF) {
    printf("%c", ch);
}
fclose(fp);

7. ランダムアクセス操作

fseek()関数を使用して任意の位置に移動できます:

FILE *fp = fopen("data.bin", "rb");
fseek(fp, 100, SEEK_SET);  // 先頭から100バイト移動
long pos = ftell(fp);      // 現在位置取得
rewind(fp);                // 先頭に戻る
fclose(fp);

8. ファイル終端判定

テキストファイルはEOFチェック、バイナリファイルは読み込みサイズで判定:

// バイナリ読み込み例
size_t items_read = fread(buffer, 1, buffer_size, fp);
if (items_read < buffer_size) {
    if (feof(fp)) printf("正常な終端");
    if (ferror(fp)) printf("エラー発生");
}

9. ファイルバッファリング

システムは自動的にメモリ上にバッファ領域を確保します。fflush()でバッファの強制書き込みが可能です。

タグ: C言語 ファイル入出力 標準ライブラリ

8月4日 02:32 投稿