J'ai un fichier de pointeur fstreamP_.
ouvrir un fichier avec:
fileP_.open(filePath_.c_str(), std::ios::in|std::ios::binary);
J'ai une fonction Read()
avec sa définition:
int Read(size_t offset, char *buffer, size_t *size)
Donc ici, je lis dans @size
@buffer
à partir de l'offset @offset
d'un fichier.
Mon code de Read()
est un peu comme ceci:Le bit eof n'est pas défini même si le décalage est supérieur à la taille du fichier
int rc = 0
fileP_.seekg(offset);
fileP_.read(buffer, *size);
if (!fileP_.gcount()) {
if (fileP_.eof())
*size = rc;
else if (fileP_.fail())
rc = -EIO;
....
Le code fonctionne bien jusqu'à ce que offset < filesize
, mais si je donne offset > filesize
gcount()
donne 0
(ce qui est prévu) mais je reçois -EIO
, et je pense que si offset > filesize
size = rc = 0
.
Ai-je raté quelque chose dans le code ci-dessus?
Merci!
Si vous cherchez> filesize l'opération échoue, la failbit est définie et la lecture ne fonctionne pas ... (eof n'a pas été défini) – EFenix
Ooh, je suis nouveau en C++ et il y a beaucoup de confusion de mon côté quand le particulier les bits sont. Changement du code pour vérifier si failbit est défini après seekg(). Merci beaucoup! –
@AntonioGarrido pouvez-vous s'il vous plaît me guider si d'autres vérifications sont nécessaires dans le code ci-dessus si j'ai manqué des contrôles? –