fopen | Programming Place Plus C言語編 標準ライブラリのリファレンス

トップページC言語編標準ライブラリのリファレンス(名前順)

トップページC言語編標準ライブラリのリファレンス(ヘッダ別)


fopen関数 🔗

概要 ファイルを開く。
ヘッダ stdio.h
形式 FILE* fopen(const char* restrict filename, const char* restrict mode);
引数 filename ファイル名。
mode モード。
戻り値 成功した場合は、オープンしたファイルを制御するための FILEオブジェクトへのポインタを返す。失敗した場合は、ヌルポインタを返す。
詳細

引数filename に指定した名前を持ったファイルをオープンし、ストリームを結びつける。


ファイル名は環境に応じたファイルパスの表現を受け付ける。たとえば、Windows では “documents\\test.txt” や “test.txt” といった表記により、カレントディレクトリ📘にある documentsディレクトリ内の test.txt を開くことができる。また、受け付けられることが保証された最大長は、FILENAME_MAXマクロで定義されている。


引数mode には以下の指定のいずれかを与える。

オープンモード 意味
r テキストファイルを読み込み用に開く
w テキストファイルを書き込み用に開く
a テキストファイルを追記用に開く
rb バイナリファイルを読み込み用に開く
wb バイナリファイルを書き込み用に開く
ab バイナリファイルを追記用に開く
r+ テキストファイルを読み書き両用に開く
w+ テキストファイルを読み書き両用に開く
a+ テキストファイルを読み書き両用で追加あるいは作成する
rb+ または r+b バイナリファイルを読み書き両用に開く
wb+ または w+b バイナリファイルを読み書き両用に開く
ab+ または a+b バイナリファイルを読み書き両用で追加あるいは作成する
(C11) wx テキストファイルを書き込み用に作成する(排他モード)
(C11) wbx バイナリファイルを書き込み用に作成する(排他モード)
(C11) w+x テキストファイルを読み書き両用に作成する(排他モード)
(C11) wb+x または w+bx バイナリファイルを読み書き両用に作成する(排他モード)


オープンモードに現れる文字には次のような意味がある。

文字 意味
r 読み取り (Read)
w 書き込み (Write)
a 追記 (Append)
b バイナリ (Binary)
+ 読み書き両用(更新モード)
(C11) x 排他モード (eXclusive)


処理系📘によっては、これらのオープンモード名の後ろに何らかの文字列を続ける形で、独自のモードを提供していることがある。たとえば、Visual Studio では、“r, ccs=UNICODE” のような形で、Unicode (UTF-16LE) のデータを入出力できる。


オープンモードごとに、以下の表のような動作の違いがある。

操作 r、rb w、wb a、ab r+、rb+、r+b w+、wb+、w+b a+、ab+、a+b wx、wbx w+x、wb+x
読み取り できる できない できない できる できる できる できない できる
書き込み できない できる できる できる できる できる できる できる
開くとファイルの中身は… そのまま 失われる そのまま そのまま 失われる そのまま 空である 空である
開くとファイルポジションは… 先頭にある 先頭にある 終わりにある 先頭にある 先頭にある 終わりにある 先頭にある 先頭にある
ファイルが存在しないときに開こうとすると… 失敗する 空のファイルが作られる 空のファイルが作られる 失敗する 空のファイルが作られる 空のファイルが作られる 空のファイルが作られる 空のファイルが作られる


C11 で追加された x が含まれるオープンモードは、指定したファイルパスにファイルが既に存在するか、作成できない理由があるときに失敗させる(w では既存のファイルの内容が失われてしまう)。
注意

FOPEN_MAXマクロで定義された数を超えてファイルを開くことはできない。

開かれたファイルの使用を終えたら fclose関数で閉じる。
使用例
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE* fp = fopen("hello.txt", "w");
    if (fp == NULL) {
        fputs("ファイルオープンに失敗しました。\n", stderr);
        exit(EXIT_FAILURE);
    }

    if (fputs("Hello, World\n", fp) == EOF) {
        fputs("ファイルへの書き込みに失敗しました。\n", stderr);
        exit(EXIT_FAILURE);
    }

    if (fclose(fp) == EOF) {
        fputs("ファイルクローズに失敗しました。\n", stderr);
        exit(EXIT_FAILURE);
    }
}

実行結果(標準出力):

実行結果(hello.txt):

Hello, World
関連

C11 からは、安全性を高めた fopen_s関数がある。

ファイルを閉じるには fclose関数を用いる。

ストリームとの結びつきを変えずにファイルを開き直す freopen関数がある。
解説章 第39章


参考リンク 🔗

本ページはアフィリエイトプログラムによる収益を得ています。
以下のリンクから商品を購入されると、Programming Place 管理者に紹介料が支払われています。


更新履歴 🔗

≪さらに古い更新履歴≫



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る