Ich habe einen fstream Zeiger fileP_.
ich eine Datei öffnen mit:
fileP_.open(filePath_.c_str(), std::ios::in|std::ios::binary);
Ich habe eine Read()
Funktion mit ihm ist die Definition als:
int Read(size_t offset, char *buffer, size_t *size)
Also hier las ich @size
in @buffer
von Position offset @offset
einer Datei.
Mein Code von Read()
ist so etwas wie folgt aus:eof Bit nicht gesetzt, auch wenn der Versatz größer ist als die Dateigröße
int rc = 0
fileP_.seekg(offset);
fileP_.read(buffer, *size);
if (!fileP_.gcount()) {
if (fileP_.eof())
*size = rc;
else if (fileP_.fail())
rc = -EIO;
....
Der Code bis offset < filesize
funktioniert gut, aber wenn ich offset > filesize
geben gibt gcount()
0
(was zu erwarten ist), aber ich -EIO
bekommen, und ich erwarte, dass, wenn offset > filesize
size = rc = 0
.
Fehle ich irgendetwas in dem obigen Code?
Danke!
Wenn Sie> filesize die Operation fehlschlägt, wird das Failbit gesetzt und lesen funktioniert nicht ... (eof wurde nicht festgelegt) – EFenix
Ooh, ich bin neu in C++ und es gibt viel Verwirrung auf meiner Seite, wenn die besonderen Bits sind. Der Code wurde geändert, um zu prüfen, ob failbit nach seekg() gesetzt ist. Danke vielmals! –
@AntonioGarrido Kannst du mir bitte sagen, ob noch weitere Prüfungen im obigen Code erforderlich sind, wenn ich irgendwelche Überprüfungen verpasst habe? –