AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ReadFile und die gelesenen Bytes

Ein Thema von Kernel32.DLL · begonnen am 18. Jan 2005 · letzter Beitrag vom 21. Jan 2005
Antwort Antwort
Kernel32.DLL
(Gast)

n/a Beiträge
 
#1

ReadFile und die gelesenen Bytes

  Alt 18. Jan 2005, 23:34
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
  Mit Zitat antworten Zitat
Kernel32.DLL
(Gast)

n/a Beiträge
 
#2

Re: ReadFile und die gelesenen Bytes

  Alt 19. Jan 2005, 23:22
Hilfe?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: ReadFile und die gelesenen Bytes

  Alt 19. Jan 2005, 23:30
Im delphi-forum.de hat mal jemand ein Programm vorgestellt, was das kann.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Kernel32.DLL
(Gast)

n/a Beiträge
 
#4

Re: ReadFile und die gelesenen Bytes

  Alt 19. Jan 2005, 23:33
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: ReadFile und die gelesenen Bytes

  Alt 19. Jan 2005, 23:38
Frag doch mal den Autor?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Kernel32.DLL
(Gast)

n/a Beiträge
 
#6

Re: ReadFile und die gelesenen Bytes

  Alt 19. Jan 2005, 23:42
Zitat von Luckie:
Frag doch mal den Autor?
hä? wie meinst du das denn?

ich will doch nur wissen, ob die win-api routine...

Zitat:
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?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: ReadFile und die gelesenen Bytes

  Alt 19. Jan 2005, 23:48
Ach so. Nein. Du musst es dir merken und dann wieder enu setzten.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Kernel32.DLL
(Gast)

n/a Beiträge
 
#8

Re: ReadFile und die gelesenen Bytes

  Alt 19. Jan 2005, 23:52
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?
  Mit Zitat antworten Zitat
Kernel32.DLL
(Gast)

n/a Beiträge
 
#9

Re: ReadFile und die gelesenen Bytes

  Alt 21. Jan 2005, 21:55
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz