Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Erkennungszeit von unlesbaren Bytes verkürzen?

  Alt 22. Jun 2004, 13:17
Zitat von Kernel32.DLL:
Mein Problem ist, dass ich ein Programm schreibe, welches bei fehlerhaften Dateien (z.B. zerkratzte CD) im Gegensatz zum Windows Explorer den Kopiervorgang nicht sofort abbricht, sondern stur weiterkopiert und die unlesbaren Bytes einfach durch "0" ersetzt.
... dass es ziemlich lange dauert, bis das Programm den Dateizeiger bei einem fehlerhaften Block um 2048 Bytes weitersetzt.
Kann man diese Zeit irgendwie reduzieren?
P.S.: Zum Auslesen benutze ich BlockRead/BlockWrite
Zum Lesen und Schreiben von Dateien gibt es versch. Funktionen, die sich durch unterschiedliche
"Nähe" zum Betriebssystem unterscheiden.
Man kann diese Arten als "highlevel" (weit weg vom OS), "lowlevel" (nahe dran am OS) und
"devicelevel" (direkter Zugriff auf Platte, CD-ROM; Umgehung des Filesystems) unterscheiden.

Die Arbeit mit AssignFile, BlockRead, CloseFile ist "highlevel" und ausserdem gepuffert.
Dagegen ist das Arbeiten mit TFileStream ist ungepuffert (der Cache des Betriebssystems ist aber dennoch wirksam) und näher am Betriebssystem.
Direkt am Betriebssystem sind die Windows API Funktionen CreateFile, ReadFile, CloseHandle.
Je näher du am Betriebssystem ansetzt, desto weniger Overhead ist enthalten und desto schwieriger
wird die Programmierung.

Andererseits wäre es möglich, dass man die Anzahl der Leseversuche irgendwo einstellen kann.
Du kannst ja mal die Forschung in Richtung: DeviceIoControl(hDevice, IOCTL_CHANGER_GET_PARAMETERS,..) richten.
Andreas
  Mit Zitat antworten Zitat