| Autor |
Beitrag |
patrick
      
Beiträge: 1481
WIN2k, WIN XP
D6 Personal, D2005 PE
|
Verfasst: Mo 24.03.03 18:14
ist es eigendlich möglich eine diskette zu formatieren und dabei eine selbstgestrickte formatierung benutzt? (man muss natürlich wissen wie das geht)
ich frag nur mal so aus interesse.
wäre doch mal interessant...
_________________ Patrick
im zweifelsfall immer das richtige tun!!!
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Mo 24.03.03 18:18
Machbar ist es schon, ich sehe nur keinen Sinn darin, ein, in der "nahen" Zukunft vom Aussterben bedrohtem Gerät, eine eigene Formatierung zu verpassen.
_________________ Ist Zeit wirklich Geld?
|
|
patrick 
      
Beiträge: 1481
WIN2k, WIN XP
D6 Personal, D2005 PE
|
Verfasst: Mo 24.03.03 18:31
die frage ist ja nur interessehalber
und wer sagt denn das es sich dabei um eine diskette handelt.
es könnte ja z.b. auch eine festplatte sein.
und für kleinere dateien ist die diskette immernoch das einzig ware  *daswarnnochzeiten*
wieso 1 MB auf ne CD brennen wenn ich sie mir auch auf ne Diskette ziehen kann.
wie gesagt die sache mit dem formatieren ist nur so aus interesse...
_________________ Patrick
im zweifelsfall immer das richtige tun!!!
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Mo 24.03.03 18:31
möglich ist es. Ich verstehe nur nicht ganz, was du unter selbstgestrickt verstehst? Ein eigenes Filesystem?
wenn du meinst, die Diskette byte für byte zu überschreiben, das geht in Delphi auch. Kannst du auch mit Platten machen. Du holst dir nur den handle der Datei (Position auf der Platte) in einem Integerwert und dann kannst du den WErt verändern und auf der Platte rumschreiben wie du willst.
Zuletzt bearbeitet von ShadowCaster am Mo 24.03.03 18:33, insgesamt 1-mal bearbeitet
|
|
patrick 
      
Beiträge: 1481
WIN2k, WIN XP
D6 Personal, D2005 PE
|
Verfasst: Mo 24.03.03 18:33
ja so was hab ich gemeint!
warum nicht 
_________________ Patrick
im zweifelsfall immer das richtige tun!!!
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Mo 24.03.03 18:37
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure OpenForShare(const FileName: String);
var FileHandle : Integer; begin FileHandle := FileOpen(FileName, fmOpenWrite or fmShareDenyNone); if FileHandle > 0 then {gültiges Datei-Handle} else {Fehler beim Öffnen: FileHandle = negativer DOS-Fehlercode} end; |
Das ist ein Beispiel aus der Delphi-Hilfe. Jetzt musst du eigentlich (wenn ich richtig vermute) nurnoch den Wert des Filehandles ändern und dann kannst du ab der Position auf der Platte rumschreiben., unabhängig ob eine Datei da steht oder nicht.
Aber sei bitte vorsichtig damit!!! Das könnte ins Auge gehen. Ich hab gelesen, dass diese Methoden heute nicht mehr in Delphi benutzt werden sollen, weil sie wie low level routinen von windows arbeiten.
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Mo 24.03.03 18:55
| ShadowCaster hat folgendes geschrieben: | | Jetzt musst du eigentlich (wenn ich richtig vermute) nurnoch den Wert des Filehandles ändern und dann kannst du ab der Position auf der Platte rumschreiben. |
Du scheinst nicht zu wissen, was hinter einem Handle steckt. Das Handle zeigt auf einen Speicherbereich bzw. ist ein Index in einem Array, das wiederum auf Speicherbereiche zeigt. Wenn man nun den Handle-Wert verändert, dann löst das zwar keine AV aus, da Windows schon auf solche Sachen eingestellt ist (bzw. sein sollte), aber man wird in deinem Beispiel nie ein Handle finden, dass einen direkten Zugriff auf die Platte hat.
Die einfachste Variante, ein eigenes Dateisystem zu erschaffen ist ein Dateisystem in einem Dateisystem. Man erzeugt einfach eine Datei mit der maximalen Dateigröße und kann dann diese Datei als Speichermedium ansehen, bei dem man an jede beliebige Stelle schreiben kann.
Die schwierigere Variante besteht darin direkt mit dem Festplatten/Disketten-Treiber zu kommunizieren. Hier bestehen allerdings starke Unterschiede zwischen NT/2000/XP und 9x/ME. Bei ersteren ist es unvergleichbar einfacher als bei 9x/ME.
_________________ Ist Zeit wirklich Geld?
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Di 25.03.03 10:22
Andy, ist das richtig was du sagst? Also nach meinen beschis... äh bescheidenen C-Kenntnissen zu Folge ist in C++ der Handle der Zeiger auf die Anfangsposition der Datei auf der Platte. Wenn du den Handle erhöhst, erhöht sich die Position. Mein Ausbilder ist auch der Meinung und mein Informatiklehrer auch. hm... Dann müsste das doch in delphi auch so sein, zumal der Handle doch auf den Plattenbereich der Datei zeigt, oder etwa nicht?
Einzigstes Problem, wenn der Handle auf die Platte zeigen würde, wäre die Fragmentierung. Wenn die Datei fragmentiert ist, überschreibst du womöglich andere Speicherbereiche von anderen Dateien...
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 25.03.03 12:09
Auch in C ist das Handle nicht ein Zeiger auf die Anfangsposition der Datei. Ein Handle ermöglicht es nur den Betriebssystem bzw. dem Programm nur, in diesem Fall, eine Datei zu indentifizieren. Auch die WinAPI CreateFile liefert nur ein Handle:
| Zitat: |
The CreateFile function creates or opens a file, directory, physical disk, volume, console buffer (CONIN$ or CONOUT$), communications resource, mailslot, or pipe. The function returns a handle that can be used to access the object.
|
Alles andere würde auch keinen Sinn machen.
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Di 25.03.03 12:20
uff... dann werd ich die Leute mal aufklären. Ich dachte jemand der Lehramt im Bereich Informatik studiert hat und ein Diplom Informatiker mit mindestens 10 Jahren Berufserfahrung müssten es wissen.
Tja, es tut sich nur die Frage auf, wie man jetzt an einer beliebigen Position auf der Platte ein Byte setzten kann, dateiunabhängig 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 25.03.03 12:27
So, ich habe noch mal in meinem C-Buch nachgelesen:
| Zitat: |
fopen() liefert einen Zeiger zurück, der entweder der Nullpointer ist, was bedeutet, dass der Zugriff nicht geklappt aht, oder einen Zeiger auf eine FILE-Strukturvariable, die die Verwaltung der Datei übernimmt.
|
Und die Struktur sieht wie folgt aus:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| typedef struct _iobuf { ... char *_ptr; /* pointer to next Character */ int _cnt; /* number of characters left in buffer */ char *_base;/* pointer toi start of buffere */ int _flag /* */ int _file /* file "handle" */ ... |
Als Bemerkung steht im Text noch:
| Zitat: |
In der Fachliteratur wird die Zeigervariable, die mit der Verwaltungsstruktur verbunden ist, oft auch als Filepointer bezeichnet. das bedeutet aber nicht, dass Sie mit ihr direkt auf ein Byte der Datei zeigen!
|
Und weiter: Wenn man mit dem Pointer zeigerarethmetik betreibt, bewegt man sich nicht in der Datei, sondern verliert nur den Kontakt zur Verwaltungsstruktur.
Bei den C++ Klassen ist es ähnlich.
So. Ich hoffe es ist jetzt klar, dass das Handle nur die Datei bezeichnet , nicht mehr und nicht weniger.
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Di 25.03.03 13:19
achso, danke 
|
|
patrick 
      
Beiträge: 1481
WIN2k, WIN XP
D6 Personal, D2005 PE
|
Verfasst: Mi 26.03.03 17:30
also klartext,kann ich das jetzt mit dem o.g. code machen??
_________________ Patrick
im zweifelsfall immer das richtige tun!!!
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Mi 26.03.03 17:36
ich fürchte nicht, da das Handle ja nicht auf die Platte zeigt...
Moderiert von tommie-lie: Doppelten Post entfernt
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Mi 26.03.03 18:55
| ShadowCaster hat folgendes geschrieben: | | ich fürchte nicht, da das Handle ja nicht auf die Platte zeigt... |
Seit wann kann ein Handle auf eine Platte zeigen?
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Mi 26.03.03 19:59
| patrick hat folgendes geschrieben: | | also klartext,kann ich das jetzt mit dem o.g. code machen?? |
Du hast immernoch nicht gesagt für welches Betriebsystem du das brauchst. Für WinNT/2000/XP habe ich was.
_________________ Ist Zeit wirklich Geld?
|
|
patrick 
      
Beiträge: 1481
WIN2k, WIN XP
D6 Personal, D2005 PE
|
Verfasst: Do 27.03.03 13:26
sorry da mits du zu weit entwickelt für mich..
ich hab noch good old WIN98  SE 
_________________ Patrick
im zweifelsfall immer das richtige tun!!!
|
|
georgfischerx
      
Beiträge: 37
|
Verfasst: Do 27.03.03 13:30
Titel: Diskettenformatierprogramm ...
Ich hatte da mal vor 10 Jahren unter MS-DOS sowas
gebastelt. Vielleicht finde ich es noch ...
Georg
|
|
patrick 
      
Beiträge: 1481
WIN2k, WIN XP
D6 Personal, D2005 PE
|
Verfasst: Do 27.03.03 13:33
*g*
_________________ Patrick
im zweifelsfall immer das richtige tun!!!
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Do 27.03.03 15:46
Titel: Re: Diskettenformatierprogramm ...
| georgfischerx hat folgendes geschrieben: | Ich hatte da mal vor 10 Jahren unter MS-DOS sowas
gebastelt. Vielleicht finde ich es noch ... |
Aber funktionieren wird das nicht mehr.
| Zitat: | | ich hab noch good old WIN98 |
Und ich habe einen noch an dein Problem anzupassenden Quellcode bei Experts-Exchange gefunden. Du musst dich aber in die Materie IOCTRLs einarbeiten, bzw. PSDK dazu lesen, um die richtigen Befehle zu bekommen.
_________________ Ist Zeit wirklich Geld?
|
|