Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Disketten sektorweise lesen/schreiben (https://www.delphipraxis.net/171533-disketten-sektorweise-lesen-schreiben.html)

zeras 11. Nov 2012 08:37

Disketten sektorweise lesen/schreiben
 
Hallo,

hat jemand eine Idee, wie man Disketten sektorweise lesen bzw. schreiben kann. Ich bräuchte eigentlich alle Sektoren einer Diskette gelesen oder geschrieben. So ähnlich wie manche Diskettenimageprogramme wie vfdisk. OK vfdisk könnte ich vielleicht auch fernsteuern, damit ich das Image bekomme oder geschrieben kriege, aber das sollte alles in einem Delphiprogramm erfolgen.

turboPASCAL 11. Nov 2012 09:10

AW: Disketten sektorweise lesen/schreiben
 
Öh, was sind Disketten ? :wink:

Vill kann dir das weiterhelfen:
http://www.delphipraxis.net/10415-diskimage-5.html

Neumann 11. Nov 2012 09:34

AW: Disketten sektorweise lesen/schreiben
 
Disketten ware glaube ich die Tontafeln, in die die Sumerer ihre Daten geritzt haben

Bummi 11. Nov 2012 10:16

AW: Disketten sektorweise lesen/schreiben
 
@Neumann :thumb::thumb:

SirThornberry 11. Nov 2012 10:27

AW: Disketten sektorweise lesen/schreiben
 
Ich denke die Frage ist ernst gemeint. Bitte macht das Thema nicht kaputt nur weil ihr nicht mehr mit Disketten arbeitet. Danke :)

zeras 11. Nov 2012 11:09

AW: Disketten sektorweise lesen/schreiben
 
Zitat:

Zitat von turboPASCAL (Beitrag 1190690)

Ja, das könnte vielleicht helfen. Ich habe das mal runtergeladen und schaue mal, was dort programmiert ist. Wobei die direkten Links nicht mehr gehen. Aber man muss ich halt von weiter oben durchhangeln.

Für die "Jüngsten" unter uns. Schaut doch mal bei Wikipedia oder Google nach. Dann werdet ihr sehen, was Disketten sind. Ist schon schwierig, wenn man noch solch "alte" Technik hat und da was draus machen muss. Es gibt noch Technik, die länger hält als eine Windows Version.:idea:

himitsu 11. Nov 2012 12:01

AW: Disketten sektorweise lesen/schreiben
 
Googlen mußt'e nicht unbedingt.

In Luckies Profil steht der Link zu seiner neuen Webseite (neue Domain) > Luckie

Und ansonsten ist die Seite noch grob fast genauso aufgebaut.
- in der alten URL findesten du das Verzeichnis und meist liegen die jetzt unter "Programmierung"
- und die Programmnamen haben sich eigentlich auch nicht verändert, so daß man sie leicht wiederfindet.


Zitat:

http: //www.luckie-online.de/Delphi/Programme/DiskImageNT1_2.zip
http: //www.michael-puff.de/Developer/Delphi/Programme/DiskImageNT1_2.zip
www.michael-puff.de > Programmierung > Delphi > Programme > DiskImageNT.zip

p80286 11. Nov 2012 12:20

AW: Disketten sektorweise lesen/schreiben
 
Kommt darauf an mit welchem Betriebssystem, bzw. wie weit Du nach "unten" gehen willst.
Die klassische Dos-Methode geht über den Int13, wobei Du allerdings das Layout der Diskette kennen solltest. Eine andere Möglichkeit ist der (Dos)Int25, der allerdings Cluster liest. (Wenn ich mich richtig erinnere)
Unter Windows kannst du mit createfile direkt auf das Medium zugreifen. Die Details hab ich allerdings nicht im Kopf, da solltest Du vllt. nach Bootsektor/CD-Lesen suchen.
Delphi-Quellcode:
  hVolumeHandle := CreateFile(PChar(sVolumeName), GENERIC_READ or GENERIC_WRITE,
                              FILE_SHARE_READ or FILE_SHARE_WRITE,
                              nil, OPEN_EXISTING, 0, 0);
Bleibt die Frage, was Du konkret vorhast, da modernere Festplatten nicht mehr über Sektor,Spur,Kopf angesteuert werden, sondern nur noch über die Sektor-Nummer, wobei nicht gewährleistet ist, das Sektor N+1 nicht unbedingt physisch hinter Sektor N liegt.

Ggf. wäre der in Windows eingebaute SCSI-Mapper für Dich von Interesse, der für alle Massenspeicher-Medien eine ähnliche Schnittstelle bietet.

Gruß
K-H

zeras 11. Nov 2012 12:39

AW: Disketten sektorweise lesen/schreiben
 
Zitat:

Zitat von p80286 (Beitrag 1190703)
Bleibt die Frage, was Du konkret vorhast, ....

Gruß
K-H

Um konkreter zu werden. Wir nutzen einen Diskettenemulator, der seine Abbilder auf eine CF-Karte schreibt. Auf der CF-Karte ist dann eine große Datei, wo viele solche Abbilder reinpassen. Dies ist alles "diskettenbasiert", d.h. es werden immer jeweils ein oder mehrere Diskettenabbilder dort reingepackt. Diese Abbilder muss ich finden, dann irgendwie wieder auf ein Dateisystem übertragen. Danach kann ich dann auf die Diskettenabbilder zugreifen. Im Endeffekt brauche ich einen eigentlich einen virtuelles Diskettenlaufwerk im Speicher, um dann die Images reinzupacken und dann auf die Daten zugreifen zu können. Das sollte aber ohne einen Treiber gehen. Wenn ich das hinbekomme, dass ich im Speicher ein array mit 1,44MB einrichten kann, dann aber filebasiert zugreifen kann. Das wird die größte Hürde sein. Wenn das nicht gehen sollte, dann müßte ich vfdisk einrichten, dann ein Abbild von 1,44 MB aus dem großen File holen, vfdisk sagen, dass eine Datei mit 1,44MB dort liegt und dann kann ich mittels normalen Diskettenzugriffen aus dem virtuellen vfd Laufwerk die Daten lesen.
Aber vielleicht hat jemand auch eine andere Idee?
Also Diskettenimage von 1,44MB vorhanden, aber Zugriffe sollen dateibasiert sein und nicht sektorbasiert.
Ich hoffe, dass ich das so einigermaßen erklären konnte.

p80286 11. Nov 2012 12:51

AW: Disketten sektorweise lesen/schreiben
 
Wenn ich das richtig verstanden habe, hast Du ein Diskettenimage, auf das Du zugreifen möchtest, als ob es ein normales Medium sei.
Ggf. ist es das einfachste, Deine Daten auf einen (superFloppy)-Usb-Stick zu klatschen, und diesen dann zu lesen?

So ganz ohne FS-Treiber, scheint mir nicht möglich zu sein.

Gruß
K-H

zeras 11. Nov 2012 13:00

AW: Disketten sektorweise lesen/schreiben
 
Zitat:

Zitat von p80286 (Beitrag 1190707)
Wenn ich das richtig verstanden habe, hast Du ein Diskettenimage, auf das Du zugreifen möchtest, als ob es ein normales Medium sei.
Ggf. ist es das einfachste, Deine Daten auf einen (superFloppy)-Usb-Stick zu klatschen, und diesen dann zu lesen?

Ja, so soll das sein. Was meinst du mit "superfloppy"-USB Stick? Einen realen Stick mit 1,44MB? Das wäre die schlechteste Alternative. Wenn, dann müßte ich doch einen virtuellen Treiber wie vfd oder Imdisk nutzen. Dann bräuchte ich keine extra Hardware.

Zitat:

Zitat von p80286 (Beitrag 1190707)
So ganz ohne FS-Treiber, scheint mir nicht möglich zu sein.

Was meinst du mit "FS-Treiber"? Ist damit FileSystem Treiber gemeint?

hathor 11. Nov 2012 13:08

AW: Disketten sektorweise lesen/schreiben
 
Hex-Editor
http://www.delphipraxis.net/39594-hx...am-editor.html

BUG 11. Nov 2012 13:13

AW: Disketten sektorweise lesen/schreiben
 
Zitat:

Zitat von zeras (Beitrag 1190708)
Ist damit FileSystem Treiber gemeint?

So gut wie sicher. Die "billige" Alternative dazu wäre es, wenn du den Dateiinhalt über ein Netzwerkprotokoll verfügbar machst und als "Netzwerklaufwerk" einbindest.
Leider ist auch das viel Arbeit und WebDav als relativ einfaches Protokoll wird leider von Windows nicht so unterstützt, dass es nutzbar wäre ... da Dateien auf Diskette klein sind, könnt es aber vielleicht trotzdem funktionieren.

zeras 11. Nov 2012 13:14

AW: Disketten sektorweise lesen/schreiben
 
Zitat:

Zitat von hathor (Beitrag 1190710)

Was meinst du damit?
Im Moment nutze ich schon einen Hexeditor, aber ich muss ein fertiges Programm erstellen, wo ich aus einem Diskettenimage eine oder mehrere Dateien auslesen kann.

BUG 11. Nov 2012 13:33

AW: Disketten sektorweise lesen/schreiben
 
Ah, ich jetzt hab ich das Problem erst verstanden:
Du willst nicht den Inhalt des Laufwerks dem System verfügbar machen, sondern einzelne Dateien aus dem Image extrahieren?

Dann müsstest du FAT16 oder FAT32 implementieren (je nach Format der Disketten und zumindest für den Lesezugriff).
FAT16 ist nicht so kompliziert wie man denken könnte und es finden sich genug Informationen darüber im Internet.

zeras 11. Nov 2012 13:43

AW: Disketten sektorweise lesen/schreiben
 
Zitat:

Zitat von BUG (Beitrag 1190716)
Dann müsstest du FAT16 oder FAT32 implementieren (je nach Format der Disketten und zumindest für den Lesezugriff).
FAT16 ist nicht so kompliziert wie man denken könnte und es finden sich genug Informationen darüber im Internet.

Wenn möglich, wollte ich erst mal auf vorhandene Komponenten oder Units zurückgreifen, denn meistens ist es ja so, dass man nicht der erste ist, der ein solches Problem hat.
Im Netz habe ich jetzt "ImDisk" gefunden, dass man auch mit einem Image "füttern" kann. Das werde ich vielleicht erst mal nutzen. Das bedeutet aber, dass ich immer das Programm ImDisk nutzen muss. Das wollte ich vermeiden, da das Programm vielleicht auch einmal verteilt werden soll und etwaige Kunden dann neben dem Programm auch noch diese Treiber installieren müßten.

Aber wenn du meinst, dass FAT12/16 nicht so schwierig ist, dann hat das bestimmt schon jemand implementtiert. Zu guter Letzt müßte ich das dann implementieren. Aber das wäre Schritt 2.

Danke erst mal für eure Antworten.

Robotiker 11. Nov 2012 13:58

AW: Disketten sektorweise lesen/schreiben
 
Zitat:

Zitat von zeras (Beitrag 1190717)
Im Netz habe ich jetzt "ImDisk" gefunden, dass man auch mit einem Image "füttern" kann.

7-Zip kann auch FAT-Images entpacken. Ist allerdings C++ und und unter GPL, aber immerhin eine im Quelltext vorliegende Lösung ...

p80286 12. Nov 2012 13:18

AW: Disketten sektorweise lesen/schreiben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab da noch etwas auf meiner Festplatte gefunden

Gruß
K-H

zeras 12. Nov 2012 18:34

AW: Disketten sektorweise lesen/schreiben
 
Zitat:

Zitat von p80286 (Beitrag 1190836)
Ich hab da noch etwas auf meiner Festplatte gefunden

Gruß
K-H

Ist ja eine Menge Holz.
Vielen Dank. Ich werde das mal durcharbeiten und sehen, ob ich zurecht komme.

BUG 12. Nov 2012 18:52

AW: Disketten sektorweise lesen/schreiben
 
Zitat:

Zitat von BUG (Beitrag 1190716)
es finden sich genug Informationen darüber im Internet.

Ich hatte da vor allem die Betriebssystem-Entwickler-Seiten im Hinterkopf:Aber anscheinend ist es nicht so einfach wie es mir früher (beim Lesen) vorgekommen ist :mrgreen:

p80286 12. Nov 2012 21:53

AW: Disketten sektorweise lesen/schreiben
 
Rein theoretisch war es einfach, man mußte nur bei der umsetzung 8/16 Bit auf 12 Bit aufpassen. In der Praxis gab es des öfteren Probleme mit dem Einsprung ebenso wurde die zweite Fat-Table nicht immer nachgepflegt.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 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