std::fseek
ヘッダ <cstdio> で定義
|
||
int fseek( std::FILE* stream, long offset, int origin ); |
||
ファイルストリーム stream
のファイル位置指示子を設定します。
stream
がバイナリモードで開かれている場合、新しい位置は、 origin
が SEEK_SET であればファイルの先頭から、 origin
が SEEK_CUR であれば現在のファイル位置から、 origin
が SEEK_END であればファイルの終端から測って、ちょうど offset
バイトになります。 バイナリストリームは SEEK_END をサポートすることが要求されません (特に追加のヌルバイトが出力される場合)。
stream
がテキストモードで開かれている場合、 offset
に対してサポートされている値は、ゼロ (任意の origin
に適用可能) および同じファイルに紐付けられているストリームに対する以前の std::ftell の呼び出しによって返された値 (origin
が SEEK_SET の場合にのみ適用可能) だけで��。
stream
がワイド指向の場合、テキストストリームとバイナリストリーム両方の制限が適用されます (std::ftell の結果は SEEK_SET でのみ使用でき、ゼロは SEEK_SET および SEEK_CUR で使用できますが SEEK_END は使用できません)。
ファイル位置指示子の変更に加えて、 fseek
は std::ungetc の効果を取り消し、ファイル終端ステータスをクリアします。
読み込みまたは書き込みエラーが発生した場合は、ストリームのエラー指示子 (std::ferror) が設定され、ファイル位置は影響を受けません。
目次 |
[編集] 引数
stream | - | 変更するファイルストリーム |
offset | - | origin からの相対位置を変更する文字数
|
origin | - | offset を加算する位置。 SEEK_SET, SEEK_CUR, SEEK_END のいずれかを指定できます
|
[編集] 戻り値
成功した場合は 0、そうでなければ非ゼロの値。
[編集] ノート
ワイドストリームで非終端位置にシークした後の、次の任意の出力関数の呼び出しは、例えば異なる長さのマルチバイトシーケンスを出力することによって、ファイルの残りを未定義の状態にします。
POSIX は既存のファイル終端を超えてシークすることを許しています。 このシークの後で出力を行なった場合、その隙間からの読み込みはゼロのバイト列を返します。 ファイルシステムがサポートしていれば、これはスパースファイルを作成します。
POSIX はまた、何らかのまだ書き込まれていないデータがある場合、 fseek はまず fflush を行うことを要求しています (しかしシフト状態が復元されるかどうかは処理系定義です)。 標準 C++ のファイルストリームはフラッシュとシフト解除の両方を保証しています (std::basic_filebuf::seekoff)。
[編集] 例
#include <cstdio> #include <cstdint> #include <vector> #include <fstream> #include <cassert> int main() { std::ofstream("dummy.nfo") << "sample data\n"; std::FILE* fp = std::fopen("dummy.nfo", "rb"); assert(fp); std::fseek(fp, 0, SEEK_END); // seek to end std::size_t filesize = std::ftell(fp); std::fseek(fp, 0, SEEK_SET); // seek to start std::vector<uint8_t> buffer(filesize); std::fread(buffer.data(), sizeof(uint8_t), buffer.size(), fp); std::fclose(fp); std::printf("i've read %zi bytes\n", filesize); }
出力:
i've read 12 bytes
[編集] 関連項目
ファイル位置指示子をファイル内の指定された位置に移動させます (関数) | |
ファイル位置指示子を取得します (関数) | |
現在のファイル位置指示子を返します (関数) | |
ファイル位置指示子をファイルの先頭に移動させます (関数) | |
fseek の C言語リファレンス
|