![]() |
ReadFile und die gelesenen Bytes
Code:
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.
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 ); 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 |
Re: ReadFile und die gelesenen Bytes
Hilfe?
|
Re: ReadFile und die gelesenen Bytes
Im delphi-forum.de hat mal jemand ein Programm vorgestellt, was das kann.
|
Re: ReadFile und die gelesenen Bytes
Meinst du das Programm von Dust Signs? Ich hab auch mal sowas angefangen, hab's dann 'ne zeitlang ruhen lassen und jetzt wiederentdeckt.
^Das Programm^ nutzt aber die pascal-routinen. beantwortet also nicht wirklich meine Frage :stupid: |
Re: ReadFile und die gelesenen Bytes
Frag doch mal den Autor?
|
Re: ReadFile und die gelesenen Bytes
Zitat:
ich will doch nur wissen, ob die win-api routine... Zitat:
|
Re: ReadFile und die gelesenen Bytes
Ach so. Nein. Du musst es dir merken und dann wieder enu setzten.
|
Re: ReadFile und die gelesenen Bytes
also im prinzip einfach die gelesenen Bytes zusammenzählen, oder?
und wie unterscheide ich jetzt zwischen Dateiende und weniger gelesenen Bytes durch Fehler? gibt's da eine besondere funktion? |
Re: ReadFile und die gelesenen Bytes
So, Frage geklärt:
Warum hab' ichs nich vorher entdeckt: In der tollen Delphi-Hilfe steht nämlich: ReadFile: The ReadFile code to check for the end-of-file condition (eof) differs for synchronous and asynchronous read operations. [...] When a synchronous read operation reaches the end of a file, ReadFile returns TRUE and sets *lpNumberOfBytesRead to zero. [...] An asynchronous read operation can encounter the end of a file during the initiating call to ReadFile, or during subsequent asynchronous operation. If EOF is detected at ReadFile time for an asynchronous read operation, ReadFile returns FALSE and GetLastError returns ERROR_HANDLE_EOF. If EOF is detected during subsequent asynchronous operation, the call to GetOverlappedResult to obtain the results of that operation returns FALSE and GetLastError returns ERROR_HANDLE_EOF. To cancel all pending asynchronous I/O operations, use the CancelIO function. This function only cancels operations issued by the calling thread for the specified file handle. I/O operations that are canceled complete with the error ERROR_OPERATION_ABORTED. Das müsste es sein. Ich werde mein Programm dann wohl in den nächsten Stunden/Tagen veröffentlichen. mfg Daniel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz