14.2.1 ファイルのオープンとクローズ
ファイルからデータを読み取るときは、まず読み取り用にファイルを開く必要があります。ファイルに書き込むときも同様です。fopen関数は、読み取りまたは書き込みの準備ができている開いているファイルへのポインタを返します。開いているファイルからすべてのデータを読み取ったり、ファイルに書き込んだりしたら、そのファイルを閉じる必要があります。fclose関数はこれを実行します。次のコードは、ファイルへの書き込みの基本パターンを示していますが、ファイルを読み取るときにも非常によく似たパターンが使用されます。
filename = "myfile.txt"; fid = fopen (filename, "w"); # Do the actual I/O here... fclose (fid);
: fid = fopen (name)
: fid = fopen (name, mode)
: fid = fopen (name, mode, arch)
: fid = fopen (name, mode, arch, encoding)
: [fid, msg] = fopen (…)
: fid_list = fopen ("all")
: [file, mode, arch, encoding] = fopen (fid)
低レベル I/O 用にファイルを開くか、開いているファイルとファイル記述子を照会します。
関数の最初の形式は、fopen指定されたモード (読み取り/書き込み、読み取り専用など)、アーキテクチャ解釈 (IEEE ビッグ エンディアン、IEEE リトルエンディアンなど)、およびファイル エンコーディングで名前付きファイルを開き、後でファイルを参照するために使用できる整数値を返します。エラーが発生した場合、fidは -1 に設定され、msgには対応するシステム エラー メッセージが含まれます。モードは、ファイルを読み取り、書き込み、またはその両方のいずれの目的で開くかを指定する 1 文字または 2 文字の文字列です。エンコーディングは、有効なエンコーディング識別子を持つ文字列です。このエンコーディングは、ファイルから文字列を読み取ったり、ファイルに文字列を書き込んだりするときに使用されます。デフォルトでは、UTF-8 です。
関数の 2 番目の形式は、、、およびストリームfopenを除く、現在開いているすべてのファイルに対応するファイル ID のベクトルを返します 。 stdinstdoutstderr
関数の 3 番目の形式は、fopenファイル ID を指定して開いているファイルに関する情報を返します。
例えば、
myfile = fopen ("splat.dat", "r", "ieee-le");
ファイルを開くスプラット読み取り用。必要に応じて、バイナリ数値は、最下位ビットを先頭とする IEEE 形式で保存されていると想定して読み取られ、その後ネイティブ表現に変換されます。
すでに開いているファイルを開くと、そのファイルが再度開かれ、別のファイル ID が返されます。ファイルを複数回開いてもエラーにはなりませんが、複数の異なるファイル ID を使用して同じファイルに書き込むと、予期しない結果が生じる可能性があります。
モードの可能な値は
モードの可能な値は
'r' (デフォルト)
ファイルを読み取り用に開きます。
'わ'
ファイルを書き込み用に開きます。以前の内容は破棄されます。
'1つの'
ファイルの末尾に書き込むためのファイルを開くか作成します。
'r+'
既存のファイルを読み書き用に開きます。
'w+'
ファイルを読み取りまたは書き込み用に開きます。以前の内容は破棄されます。
‘w+’
ファイルの末尾で読み取りまたは書き込みを行うためにファイルを開くか作成します。
"t"ファイルをテキスト モードで開くにはモード文字列に を 追加し、"b"バイナリ モードで開くには を追加します。Windows システムでは、テキスト モードの読み取りと書き込みにより、改行文字がシステムの適切な行末文字 (Windows では復帰改行) に自動的に変換されます。モードが指定されていない場合のデフォルトはバイナリです。
さらに、"z"モード文字列に を追加して、gzip 圧縮されたファイルを読み取りまたは書き込み用に開くこともできます。これを成功させるには、ファイルをバイナリ モードでも開く必要があります。
パラメータarchは、ファイルのデフォルトのデータ形式を指定する文字列です。arch の有効な値は次のとおりです。
"native"または"n"(デフォルト)
現在のマシンのフォーマット。
"ieee-be"または"b"
IEEE ビッグ エンディアン形式。
"ieee-le"または"l"
IEEE リトルエンディアン形式。
まだ存在しない新しいファイルを開く場合、権限は に設定されます 。 0666 - umask
互換性に関する注意: Octave は、バッファリングされた I/O を使用してファイルを開きます。小さな書き込みは、内部バッファがいっぱいになるまで蓄積され、その後すべてが 1 回の操作で書き込まれます。これは非常に効率的で、パフォーマンスが向上します。 ただし、 MATLAB は、すべての書き込み操作がすぐに実行されるフラッシュされた I/O を使用してファイルを開きます。データが書き込まれた直後に書き込み操作を実行する必要がある場合は、書き込みの後に を呼び出して fflush内部バッファをフラッシュする必要があります。
See also: fclose, fgets, fgetl, fscanf, fread, fputs, fdisp, fprintf, fwrite, fskipl, fseek, frewind, ftell, feof, ferror, fclear, fflush, freport, umask.
: status = fclose (fid)
: status = fclose ("all")
ファイル記述子fidで指定されたファイルを閉じます。
成功した場合はfclose0 を返し、そうでない場合は -1 を返します。呼び出しの 2 番目の形式では、、、およびgnuplot に関連付けられた FID を fclose除くすべての開いているファイルを閉じます 。stdinstdoutstderr
See also: fopen, fflush, freport.
: tf = is_valid_file_id (fid)
fid が開いているファイルを参照している 場合は true を返します。
See also: freport, fopen.