![]() |
[erledigt ] Floppy Sector-weise auslesen
Hallo,
![]() Als dritter Paramter von ReadFile wird ja erwartet, wie viele Bytes gelesen werden sollen (bei Disketten ja nur ein Vielfaches der zahl Bytes/Sector, weil dann immer ganze Sektoren ausgelesen werden). Mein Problem ist nun: Habe mehrere (3) ältere Disketten, die alle exakt den gleichen Inhalt haben. (Sie wurden raw-kopiert.) Ich möchte die Daten von ihnen sichern. Allerdings sind alle an irgendeiner Stelle nicht lesbar. Ich vermute, dass es aufgrund des Alters dazu gekommen ist, dass ein oder mehrere Sektoren nicht mehr lesbar sind. Nun will ich alle 2880 Sektoren einzeln auslesen. ( je Von allen Disketten) Und die unbeschädigten zusammenfügen. Leider kann ich bei ReadFile kein Anfang zum Lesen eingeben, nur eine Anzahl von Bytes. Sonst würde ich halt von 0 bis 511, dann von 512 bis 1023, dann von 1024 ... usw die Sektoren auslesen. Hat da jemand eine Idee? Vielen Dank |
AW: Floppy Sector-weise auslesen
Du kannst versuchen mit einem simplen FileStream auf die Diskette zuzugreifen. Dann steht dir mit Seek eine Möglichkeit zum Positionieren zur Verfügung.
Delphi-Quellcode:
fileStream := TFileStream.Create('\\.\A:', fmOpenRead);
|
AW: Floppy Sector-weise auslesen
Das Problem ist dann ja, dass ich nicht weiß, ob dieser Bereich korrupt ist.
Bei ReadFile kann ich aber den Rückgabewert anschauen. Könnte man vielleicht mit "SetFilePointer" sowas machen?
Delphi-Quellcode:
Leider ist das noch recht neu für mich,
GetMem(buffer, 512); // genug Speicher FÜR EINEN SEKTOR reservieren
SetFilePointer(fhandle, sec * 512, nil, FILE_BEGIN); if not ReadFile(fhandle, buffer^, 512, bytesread, nil) then // [konnte Sektor "sec" nicht auslesen... ] habe ![]()
Delphi-Quellcode:
// Setting the pointer to point to the start of the sector we want to read ..
SetFilePointer (hDevice, (startinglogicalsector*512), NULL, FILE_BEGIN); |
AW: Floppy Sector-weise auslesen
Zitat:
|
AW: Floppy Sector-weise auslesen
Wie kann ich denn mit dem Stream an einer speziellen Stelle auf der Diskette von ihr lesen?
Wenn ich die ganze Diskette lese, kann ich nicht im Nachhinein herausfinden, ob der Bereich verfügbar ist. |
AW: Floppy Sector-weise auslesen
Außerdem, selbst wenn der Fehler still ignoriert wird, kannst du ja dadurch, dass alle drei Disketten den gleichen Inhalt haben, recht leicht rausfinden, welche Bytes korrekt sind, wenn immer nur höchstens eine Diskette an einer bestimmten Stelle einen Fehler hat.
|
AW: Floppy Sector-weise auslesen
Das ist eine gute Idee. Werde ich gleich ausprobierenm
|
AW: Floppy Sector-weise auslesen
Zitat:
|
AW: Floppy Sector-weise auslesen
Die Idee ist wirklich sehr gut. Dann kann ich auch gleich die Diskette mit Winimage auslesen.
Für den automatischen Vergleich könnte ich dann ja ein Programm schreiben. Vielen Dank für den Tipp! |
AW: [erledigt ] Floppy Sector-weise auslesen
Guck mal hier:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 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 by Thomas Breitkreuz