Namespaces
Variants

std:: fopen

From ja.cppreference.net
< cpp ‎ | io ‎ | c
ヘッダーで定義 <cstdio>
std:: FILE * fopen ( const char * filename, const char * mode ) ;

filename で指定されたファイルを開き、そのファイルに関連付けられたファイルストリームを返します。 mode はファイルアクセスモードを決定するために使用されます。

目次

翻訳内容: - 「Contents」→「目次」 - その他のテキスト(Parameters、File access flags、Return value、Notes、Example、See also)はC++関連の専門用語として翻訳せず、原文のまま保持 - HTMLタグ、属性、数値、リンクはすべて変更なしで保持

パラメータ

filename - ファイルストリームに関連付けるファイル名
mode - ファイルアクセスモードを決定する ヌル終端文字列

ファイルアクセスフラグ

ファイルアクセス
モード文字列
意味 説明 ファイルが既に存在する場合の動作 ファイルが存在しない場合の動作
"r" read ファイルを読み取り用に開く 先頭から読み取り NULL を返し、エラーを設定
"w" write ファイルを書き込み用に作成 内容を破棄 新規作成
"a" append ファイルに追記 末尾に書き込み 新規作成
"r+" read extended ファイルを読み書き用に開く 先頭から読み取り NULL を返し、エラーを設定
"w+" write extended ファイルを読み書き用に作成 内容を破棄 新規作成
"a+" append extended ファイルを読み書き用に開く 末尾に書き込み 新規作成
ファイルアクセスモードフラグ "b" をオプションで指定してファイルを バイナリモード で開くことができる。このフラグはPOSIXシステムでは効果がないが、Windowsなどでは ' \n ' と ' \x1A ' の特殊な処理を無効にする。
追記ファイルアクセスモードでは、ファイル位置指示子の現在位置に関係なく、データはファイルの末尾に書き込まれる。
ファイルアクセスモードフラグ "x" はオプションで "w" または "w+" 指定子に追加できる。このフラグは、ファイルが存在する場合に上書きする代わりに関数が失敗するように強制する。 (C++17)
モードが上記の文字列のいずれでもない場合、動作は未定義である。一部の実装では追加でサポートされるモードを定義している(例: Windows )。

戻り値

成功した場合、開かれたファイルストリームを制御するオブジェクトへのポインタを返し、eofビットとerrorビットの両方がクリアされます。ストリームは、 filename が対話型デバイスを参照しない限り完全にバッファリングされます。

エラーの場合、ヌルポインタを返します。 POSIXでは この場合 errno が設定されることが要求されています。

注記

filename の形式は実装定義であり、必ずしもファイルを参照するとは限りません(例:コンソールやファイルシステムAPIを通じてアクセス可能な他のデバイスなど)。これらをサポートするプラットフォームでは、 filename は絶対パスまたは相対パスのファイルシステムパスを含む場合があります。

移植可能なディレクトリおよびファイル命名については、 C++ filesystem library または boost.filesystem を参照してください。

例

#include <cstdio>
#include <cstdlib>
int main()
{
    int is_ok = EXIT_FAILURE;
    FILE* fp = std::fopen("/tmp/test.txt", "w+");
    if (!fp)
    {
        std::perror("File opening failed");
        return is_ok;
    }
    int c; // 注意: charではなくint、EOFを扱うために必要
    while ((c = std::fgetc(fp)) != EOF) // 標準C I/Oファイル読み込みループ
        std::putchar(c);
    if (std::ferror(fp))
        std::puts("I/O error when reading");
    else if (std::feof(fp))
    {
        std::puts("End of file reached successfully");
        is_ok = EXIT_SUCCESS;
    }
    std::fclose(fp);
    return is_ok;
}

出力:

End of file reached successfully

関連項目

ファイルを閉じる
(関数)
出力ストリームを実際のファイルと同期する
(関数)
既存のストリームを別の名前で開く
(関数)