std::fopen
From cppreference.com
| ヘッダ <cstdio>で定義 |
||
| std::FILE* fopen( const char* filename, const char* mode ); |
||
指定された filename のファイルをオープンし、そのファイルに関連付けられたファイルストリームを返します。mode はファイルアクセスモードを決定するために使用されます。
目次 |
[編集] パラメータ
| filename | - | ファイルストリームを関連付けるファイル名 |
| モード | - | ファイルアクセスモードを決定するヌル終端文字列 |
[編集] ファイルアクセスフラグ
| ファイルアクセス モード文字列 |
意味 | 説明 | ファイルが存在する場合のアクション 既に存在する場合 |
ファイルが存在する場合のアクション 存在しない場合 |
|---|---|---|---|---|
| "r" | read | 読み込み用にファイルを開く | 最初から読み込む | NULL を返し、エラーを設定します。 |
| "w" | write | 書き込み用にファイルを作成する | 内容を破棄する | 新規作成する |
| "a" | append | ファイルに追記する | 末尾に書き込む | 新規作成する |
| "r+" | 拡張読み込み | 読み書き用にファイルを開く | 最初から読み込む | NULL を返し、エラーを設定します。 |
| "w+" | 拡張書き込み | 読み書き用にファイルを作成する | 内容を破棄する | 新規作成する |
| "a+" | 拡張追記 | 読み書き用にファイルを開く | 末尾に書き込む | 新規作成する |
| ファイルアクセスモードフラグ "b" は、オプションでファイルをバイナリモードで開くために指定できます。このフラグはPOSIXシステムでは影響しませんが、Windowsなどでは、'\n' および '\x1A' の特別な処理を無効にします。 追記ファイルアクセスモードでは、ファイル位置指示子の現在の位置に関係なく、データはファイルの末尾に書き込まれます。 | ||||
| ファイルアクセスモードフラグ "x" は、オプションで "w" または "w+" 指定子に追加できます。このフラグは、ファイルがすでに存在する場合に上書きする代わりに、関数の失敗を強制します。(C++17) | ||||
| モードが上記リストのいずれかの文字列でない場合、動作は未定義です。一部の実装では、追加のサポートされているモードが定義されています(例:Windows)。 | ||||
[編集] 戻り値
成功した場合、オープンされたファイルストリームを制御するオブジェクトへのポインタを返します。このとき、eofビットとエラービットはクリアされます。ストリームは、filename が対話型デバイスを参照しない限り、フルバッファリングされます。
エラーが発生した場合、ヌルポインタを返します。POSIX では、この場合に errno が設定されることが要求されています。
[編集] 注記
filename の形式は実装定義であり、必ずしもファイルを参照するとは限りません(例:コンソールやファイルシステムAPIを通じてアクセス可能な別のデバイスである可能性があります)。それらをサポートするプラットフォームでは、filename に絶対パスまたは相対パスを含めることができます。
移植性の高いディレクトリおよびファイル命名については、C++ファイルシステムライブラリまたは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; // Note: int, not char, required to handle EOF while ((c = std::fgetc(fp)) != EOF) // Standard C I/O file reading loop 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
[編集] 関連項目
| ファイルを閉じる (関数) | |
| 出力ストリームを実際のファイルと同期させる (関数) | |
| 既存のストリームを別の名前で開く (関数) | |
| C言語のドキュメント (fopen)
| |