
C言語入門|ファイル操作の4ステップと基本関数
いよいよファイル操作に挑戦
おまっとさん!
ここからはいよいよ ファイルを直接操作する世界 に足を踏み入れます。
画面に文字を表示したり、キーボードから入力を受け取ったりするだけでなく、
プログラムの外にあるファイルを読み書きできるようになると、
できることが一気に広がります。
とはいえ、C言語のファイル操作には「お作法」があります。
まずはその全体像をしっかり押さえておきましょう。

ファイル操作は必ず4ステップ
C言語では、ファイルの読み書きを 次の4つのステップ で行います。
| ステップ | 内容 | 役割 |
|---|---|---|
| ➀ | FILE構造体へのポインタを宣言 | 準備 |
| ➁ | ファイルを開く | 準備 |
| ➂ | 読み書きする | メイン処理 |
| ➃ | ファイルを閉じる | 後片付け |
このうち、本当にやりたい処理は➂ ですが、
それを安全に行うために、前後の準備と後片付けが欠かせません。
料理に例えるなら、
- ファイルを開く → 包丁とまな板を用意する。
- 読み書きする → 調理する。
- ファイルを閉じる → 洗い物をする。
という感じです。
FILE構造体とファイルポインタ
ファイル操作の主役となるのが FILE構造体 です。
FILE構造体とは
FILE構造体は、次のような情報をまとめて管理するための構造体です。
- ファイルのアクセスモード
- 現在の読み書き位置
- エラー状態
- 内部バッファの情報
ただし、
中身を直接操作することはありません。
私たちは、この構造体へのポインタを使って、
標準ライブラリの関数に処理を任せます。
ファイルポインタ
FILE構造体へのポインタは、一般に ファイルポインタ と呼ばれます。
FILE* fp;この fp を、
読み書き関数・閉じる関数に必ず渡すことになります。
fopen ― ファイルを開く
ファイル操作は、まず ファイルを開く ところから始まります。
fopen の書式
FILE* fopen(const char* filename, const char* mode)| 引数 | 意味 |
|---|---|
| filename | 開きたいファイル名(相対パスまたは絶対パス) |
| mode | アクセスモード |
| 戻り値 | 成功時はファイルポインタ、失敗時は NULL |
fopen の役割
fopen は、
- 指定したファイルを
- 指定したモードで開き
- ファイル操作に必要な情報を初期化する。
という仕事を行います。
もしファイルを開けなかった場合は、
NULL が返る ため、必ずチェックが必要です。
アクセスモードの考え方
ファイルは「どう使うか」を指定して開きます。
これを アクセスモード といいます。
テキストファイルの主なモード
| モード | 意味 | ファイルが存在しない場合 |
|---|---|---|
| r | 読み取り専用 | エラー |
| w | 書き込み専用 | 新規作成 |
| a | 追加書き込み | 新規作成 |
| r+ | 読み書き | エラー |
| w+ | 読み書き | 新規作成 |
| a+ | 読み取り+追加 | 新規作成 |
バイナリファイルのモード
テキストモードの末尾に b を付けます。
| 例 | 意味 |
|---|---|
| rb | バイナリ読み取り |
| wb | バイナリ書き込み |
| ab | バイナリ追加 |
テキストとバイナリの違い
両者の違いは 改行コードの扱い だけです。
- テキストモード
→ OSに応じて改行コードを自動変換 - バイナリモード
→ データをそのまま扱う
内容をそのまま扱いたい場合は、バイナリモードを使います。
fclose ― ファイルを閉じる
ファイルを使い終わったら、必ず 閉じる 必要があります。
fclose の書式
int fclose(FILE* fp)| 戻り値 | 意味 |
|---|---|
| 0 | 正常終了 |
| EOF | エラー |
fclose の役割
fclose は、
- ファイルとの接続を解除し
- 内部バッファをフラッシュし
- OSにファイルを返却する。
という重要な後片付けを行います。
注意点
- fp が NULL の状態で fclose を呼ぶ動作は保証されない
- fopen に失敗した場合は fclose を呼ばない
という点には注意してください。
exit によるエラー処理
ファイル操作では、
「ファイルを開けなかった」
という状況が必ず発生します。
その場合は、処理を続行せず 即終了 するのが安全です。
exit(1);exit に 0 以外の値を渡すことで、
「このプログラムは異常終了した」
という情報をOSに伝えることができます。
ファイルの閉じ忘れに注意
初心者が最もやってしまいがちなのが、
ファイルの閉じ忘れ です。
閉じ忘れの問題点
| 問題 | 内容 |
|---|---|
| ファイル占有 | 他のプログラムが使えなくなる。 |
| リソース枯渇 | 同時に開けるファイル数に制限がある。 |
| 不具合調査が困難 | 原因がわかりにくい。 |
正常終了時だけでなく、
エラー発生時にも確実に fclose が呼ばれるように
制御を書くことが重要です。
次に進む前に覚えておくこと
この節で押さえておきたいポイントは次の3つです。
- ファイル操作は必ず4ステップ
- FILE構造体は直接触らない。
- 開いたファイルは必ず閉じる。
次の節からは、
実際に読み書きする関数群 をひとつずつ紹介していきます。
