Code:
BOOL ReadFile(
HANDLE hFile, //
handle of file to read
LPVOID lpBuffer, // address of buffer that receives data
DWORD nNumberOfBytesToRead, // number of bytes to read
LPDWORD lpNumberOfBytesRead, // address of number of bytes read
LPOVERLAPPED lpOverlapped // address of structure for data
);
Der Parameter "lpNumberOfBytesRead" gibt ja, wenn ich das richtig verstanden habe, die Zahl der gelesenen Bytes zurück. Damit wir das Ende einer Datei bestimmen können, vergleichen wir einfach "nNumberOfBytesToRead" mit "lpNumberOfBytesRead". Wenn "lpNumberOfBytesRead" kleiner ist als "nNumberOfBytesToRead", können wir davon ausgehen, dass das Dateiende erreicht ist.
Jetzt aber meine Frage:
Angenommen, ich habe auf einer CD eine ~700 MB große Datei. Jetzt ist mitten auf der CD son kleiner, richtig fieser Kratzer. Jetzt komme ich mit ReadFile an dem besagtem Punkt mit dem Kratzer an und das Laufwerk ist nicht mehr in der Lage, die restlichen Bytes auszulesen.
Ist jetzt der Rückgabewert von "lpNumberOfBytesRead" < "nNumberOfBytesToRead"? Und wird der Dateizeiger, wenn ich dann den fehlerhaften Bereich überspringen will, automatisch um "nNumberOfBytesToRead" weiterverschoben, wenn ich ReadFile wieder aufrufe?
Ähm... Hoffe mal, ich habe mich nicht allzu umständlich ausgedrückt.
Euer Daniel