名前空間
変種
操作

fopen, fopen_s

提供: cppreference.com
< c‎ | io
 
 
ファイル入出力
関数
ファイルアクセス
fopenfopen_s
(C11)
(C95)
直接入出力
書式なし入出力
(C11以前)(C11およびそれ以降)
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)
書式付き入力
書式付き出力
ファイル位置操作
エラー処理
ファイルに対する操作
 
ヘッダ <stdio.h> で定義
(1)
FILE *fopen( const char *filename, const char *mode );
(C99以前)
FILE *fopen( const char *restrict filename, const char *restrict mode );
(C99およびそれ以降)
errno_t fopen_s(FILE *restrict *restrict streamptr,

                const char *restrict filename,

                const char *restrict mode);
(2) (C11およびそれ以降)
1) filename で指定されたファイルを開き、そのファイルに紐付けられたファイルストリームを返します。 ファイルアクセスモードを決定するために mode が使用されます。
2) (1) と同じですが、ファイルストリームを指すポインタは streamptr に書き込まれ、以下のエラーが実行時に検出され、現在設定されている制約ハンドラ関数を呼びます。
  • streamptr がヌルポインタ。
  • filename がヌルポインタ。
  • mode がヌルポインタ。
すべての境界チェック付き関数と同様に、 fopen_s__STDC_LIB_EXT1__ が処理系によって定義されていて、 <stdio.h> をインクルードする前にユーザが __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義した場合にのみ、利用可能であることが保証されます。

目次

[編集] 引数

filename - ファイルストリームを紐付けるファイル名
mode - ファイルアクセスモードを決定するヌル終端文字列
ファイルアクセスモード文字列 意味 説明 ファイルがすでに存在する場合の動作 ファイルが存在しない場合の動作
"r" read 読み込み用にファイルを開く 先頭から読み込み エラー
"w" write 書き込み用にファイルを作成 内容を破棄 新規作成
"a" append ファイルに追記 終端に書き込み 新規作成
"r+" read extended 読み込み/書き込み用にファイルを開く 先頭から読み込み エラー
"w+" write extended 読み込み/書き込み用にファイルを作成 内容を破棄 新規作成
"a+" append extended 読み込み/書き込み用にファイルを開く 終端に書き込み 新規作成
バイナリモードでファイルを開くためにファイルアクセスモード "b" を任意に指定できます。 このフラグは POSIX システムでは効果がありませんが、 Windows では '\n' および '\x1A' の特殊処理を無効化できます。
追記ファイルアクセスモードでは、データはファイル位置指示子の現在位置にかかわらずファイルの終端に書き込まれます。
モードが上記の文字列のいずれでもなければ動作は未定義です。 処理系によっては追加でサポートされているモードを定義していることがあります (例えば Windows)。
更新モード ('+') では、入力と出力の両方を行うことができますが、入力操作がファイル終端に達した場合以外は、入力の後に fflush, fseek, fsetpos または rewind を挟まずに出力を行うことはできず、出力の後に fseek, fsetpos または rewind を挟まずに入力を行うことはできません。 更新モードでは、処理系はテキストモードが指定されているときでもバイナリモードを使用することが許されています。
ファイルアクセスモードフラグ "x" を "w" または "w+" 指定子に追加することができます。 このフラグはファイルが存在している場合に、それを上書きする代わりに関数を強制的に失敗させます。 (C11)
fopen_s または freopen_s を使用した場合、 "w" または "a" で作成されたあらゆるファイルに対して、他のユーザがアクセスできないようにファイルアクセスパーミッションが設定されます。 デフォルトの fopen のパーミッションを有効化するために、 "w" または "a" で始まる任意の指定子の前にファイルアクセスモードフラグ "u" を任意に指定できます。 (C11)
streamptr - 結果を格納するポインタへのポインタ (出力引数)

[編集] 戻り値

1) 成功した場合は、新しいファイルストリームを指すポインタを返します。 filename が対話型デバイスを参照してなければ、ストリームは完全バッファリングされます。 エラーの場合は、ヌルポインタを返します。 POSIX はこの場合に errno を設定することを要求しています
2) 成功した場合は、ゼロを返し、新しいファイルストリームを指すポインタが *streamptr に書き込まれます。 エラーの場合、非ゼロのエラーコードを返し、 (streamptr 自体がヌルポインタでなければ) ヌルポインタが *streamptr に書き込まれます。

[編集] ノート

filename の書式は処理系定義であり、必ずしもファイルを参照するとは限りません (例えば、ファイルシステム API を通してアクセス可能なコンソールや別のデバイスかもしれません)。 プラットフォームがサポートする場合、 filename はファイルシステムの絶対パスまたは相対パスを含んでも構いません。

[編集]

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    FILE* fp = fopen("test.txt", "r");
    if(!fp) {
        perror("File opening failed");
        return EXIT_FAILURE;
    }
 
    int c; // note: int, not char, required to handle EOF
    while ((c = fgetc(fp)) != EOF) { // standard C I/O file reading loop
       putchar(c);
    }
 
    if (ferror(fp))
        puts("I/O error when reading");
    else if (feof(fp))
        puts("End of file reached successfully");
 
    fclose(fp);
}


[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.21.5.3 The fopen function (p: 305-306)
  • K.3.5.2.1 The fopen_s function (p: 588-590)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.19.5.3 The fopen function (p: 271-272)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.9.5.3 The fopen function

[編集] 関連項目

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