私はfstreamポインタfileP_を持っています。だからここに私は、ファイルのオフセット@offset
から始まる@buffer
で@size
を読む
int Read(size_t offset, char *buffer, size_t *size)
:私はそれとしての定義とRead()
機能を持っている
fileP_.open(filePath_.c_str(), std::ios::in|std::ios::binary);
:
は、私が使用してファイルを開きます。 Read()
の
私のコードは、多少、このようなものです:オフセットがファイルサイズを超えていても、eofビットが設定されない
int rc = 0
fileP_.seekg(offset);
fileP_.read(buffer, *size);
if (!fileP_.gcount()) {
if (fileP_.eof())
*size = rc;
else if (fileP_.fail())
rc = -EIO;
....
コードがoffset < filesize
まで正常に動作しますが、私はoffset > filesize
を与える場合gcount()
が(予想される)0
を与えますが、私は-EIO
を取得し、私は、もしoffset > filesize
size = rc = 0
を期待します。
上記のコードで何か不足していますか?
ありがとうございます!
フェイルビットが設定されていても、操作が失敗すると、フェイルビットが設定され、読み込みに失敗します。(eofは設定されていません) – EFenix
私はC++を初めて使用しています。ビットはあります。 seekg()の後にfailbitが設定されているかどうかをチェックするコードを変更しました。どうもありがとう! –
@AntonioGarrido上記のコードにチェックが必要な場合は、私が手引きをしてもらえますか? –