AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) [erledigt ] Floppy Sector-weise auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

[erledigt ] Floppy Sector-weise auslesen

Ein Thema von thomasschaf · begonnen am 11. Apr 2013 · letzter Beitrag vom 12. Apr 2013
Antwort Antwort
Seite 1 von 2  1 2      
thomasschaf
(Gast)

n/a Beiträge
 
#1

[erledigt ] Floppy Sector-weise auslesen

  Alt 11. Apr 2013, 21:20
Hallo,

hier wird beschrieben, wie man ReadFile zum Lesen von einer Diskette im Raw-Format benutzt.

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

Geändert von thomasschaf (11. Apr 2013 um 23:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: Floppy Sector-weise auslesen

  Alt 11. Apr 2013, 22:04
Du kannst versuchen mit einem simplen FileStream auf die Diskette zuzugreifen. Dann steht dir mit Seek eine Möglichkeit zum Positionieren zur Verfügung.

fileStream := TFileStream.Create('\\.\A:', fmOpenRead);
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
thomasschaf
(Gast)

n/a Beiträge
 
#3

AW: Floppy Sector-weise auslesen

  Alt 11. Apr 2013, 22:11
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:
    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... ]
Leider ist das noch recht neu für mich,
habe hier (zwar C++) Zeile 60 etwas gefunden.
Delphi-Quellcode:
 // Setting the pointer to point to the start of the sector we want to read ..
SetFilePointer (hDevice, (startinglogicalsector*512), NULL, FILE_BEGIN);

Geändert von thomasschaf (11. Apr 2013 um 22:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: Floppy Sector-weise auslesen

  Alt 11. Apr 2013, 22:44
Das Problem ist dann ja, dass ich nicht weiß, ob dieser Bereich korrupt ist.
Wieso nicht? Der Stream liest genauso von der Diskette. Wenn das nicht möglich ist, bekommst du einen Fehler. Dann kannst du den Bereich überspringen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
thomasschaf
(Gast)

n/a Beiträge
 
#5

AW: Floppy Sector-weise auslesen

  Alt 11. Apr 2013, 22:51
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.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Floppy Sector-weise auslesen

  Alt 11. Apr 2013, 22:51
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.
  Mit Zitat antworten Zitat
thomasschaf
(Gast)

n/a Beiträge
 
#7

AW: Floppy Sector-weise auslesen

  Alt 11. Apr 2013, 22:53
Das ist eine gute Idee. Werde ich gleich ausprobierenm
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Floppy Sector-weise auslesen

  Alt 11. Apr 2013, 23:01
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
thomasschaf
(Gast)

n/a Beiträge
 
#9

AW: Floppy Sector-weise auslesen

  Alt 11. Apr 2013, 23:13
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!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: [erledigt ] Floppy Sector-weise auslesen

  Alt 11. Apr 2013, 23:24
Guck mal hier: http://michael-puff.de/Programmierung/Delphi/Programme/ -> DiskImageNT.zip
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:44 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