[gelöst] Problem beim Formatieren eines Datenträgers
-
- Beiträge: 177
- Registriert: Mi 2. Sep 2015, 11:09
- OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
- CPU-Target: Windows 32/64bit
[gelöst] Problem beim Formatieren eines Datenträgers
Hallo zusammen,
in einer Anwendung muss ich Dateien von einem Netzlaufwerk auf einen lokalen Datenträger (USB-Stick / SD-Karte) kopieren und vorab den Datenträger formatieren.
Das Formatieren bewerkstellige ich mit der Funktion FormatEx() aus der Windows-DLL "FMIFS" oder wahlweise mit der Funktion ShFormatDrive().
zum Problem:
Wird der Inhalt des Datenträgers bereits zum Beispiel im Windows-Explorer angezeigt, kann ich den Datenträger aus der Anwendung heraus, über den Windows eigenen Format-Dialog (ShFormatDrive()) formatieren.
Über FormatEx() jedoch bricht die Formatierung ab und gibt als Rückgabe den Hinweis zurück, dass der Datenträger bereits in Verwendung ist.
Kennt jemand eine Möglichkeit, die momentane Nutzung eines Datenträger zu unterbinden / unterbrechen, so wie es auch scheinbar der Windows-Format-Dialog macht?
viele Grüße
in einer Anwendung muss ich Dateien von einem Netzlaufwerk auf einen lokalen Datenträger (USB-Stick / SD-Karte) kopieren und vorab den Datenträger formatieren.
Das Formatieren bewerkstellige ich mit der Funktion FormatEx() aus der Windows-DLL "FMIFS" oder wahlweise mit der Funktion ShFormatDrive().
zum Problem:
Wird der Inhalt des Datenträgers bereits zum Beispiel im Windows-Explorer angezeigt, kann ich den Datenträger aus der Anwendung heraus, über den Windows eigenen Format-Dialog (ShFormatDrive()) formatieren.
Über FormatEx() jedoch bricht die Formatierung ab und gibt als Rückgabe den Hinweis zurück, dass der Datenträger bereits in Verwendung ist.
Kennt jemand eine Möglichkeit, die momentane Nutzung eines Datenträger zu unterbinden / unterbrechen, so wie es auch scheinbar der Windows-Format-Dialog macht?
viele Grüße
Zuletzt geändert von TBug am Mo 27. Jun 2022, 18:29, insgesamt 1-mal geändert.
Re: Problem beim Formatieren eines Datenträgers
Ich mache das entweder so:
- Medium einlegen und wenn es im Datei-Manager erscheint ("This PC") dann einen rechtsklick drauf und im Kontext-Menü, Format auswählen und formatieren.
oder (falls zb. das Medium nicht erscheinen sollte),
- "Disk Manager" starten und dort sollte das Medium mit seiner Partitionierung auftauchen. Dort kann man dann alle Partitionen löschen auf dem Medium löschen, neue erstellen usw.
Für Formatierungen habe ich bisher nie, kann mich zumindest nicht erinnern, extra Software gebraucht. Sollte ein Medium in Benutzung sein, muss die Software geschlossen werden, die auf das Medium zugreift.
Edit: Mein Windows ist English, darum verzeihung wenn ich keine deutschen Begriffe verwende, ich kenne die zum Teil auch nicht.
mfg
- Medium einlegen und wenn es im Datei-Manager erscheint ("This PC") dann einen rechtsklick drauf und im Kontext-Menü, Format auswählen und formatieren.
oder (falls zb. das Medium nicht erscheinen sollte),
- "Disk Manager" starten und dort sollte das Medium mit seiner Partitionierung auftauchen. Dort kann man dann alle Partitionen löschen auf dem Medium löschen, neue erstellen usw.
Für Formatierungen habe ich bisher nie, kann mich zumindest nicht erinnern, extra Software gebraucht. Sollte ein Medium in Benutzung sein, muss die Software geschlossen werden, die auf das Medium zugreift.
Edit: Mein Windows ist English, darum verzeihung wenn ich keine deutschen Begriffe verwende, ich kenne die zum Teil auch nicht.
mfg
-
- Beiträge: 177
- Registriert: Mi 2. Sep 2015, 11:09
- OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
- CPU-Target: Windows 32/64bit
Re: Problem beim Formatieren eines Datenträgers
Hallo zusammen,
Das ist aber nicht der Sinn des Programmes.
Das Programm nimmt dem Benutzer alles ab. Nach dem der User das entsprechende Fahrzeug ausgewählt hat drückt er auf "Start" und der Datenträger wird entsprechend der Vorgabe mit dem im Programm hinterlegten bzw. benötigten FileSystem formatiert und im Anschluß werden die benötigten Daten auf den Datenträger kopiert.
Die so erstellten Datenträger kommen dann zum Update der Navigationsgeräte in Fahrzeugen zum Einsatz, so dass ich nicht möchte, dass die Mechaniker noch überlegen müssen, wie und mit welchen Einstellungen sie die SD-Karte oder den USB-Stick formatienen müssen und aus welchen Verzeichnissen die Daten kopiert werden sollen.
Das Formatieren via FormatEx() funktioniert ja gererell, nur jedoch momentan noch nicht, wenn von anderer Stelle aus auf den Inhalt des zu formatierenden Datenträgers zugegriffen wird.
Es muss ja eine Möglichkeit geben, da ja der interne Format-Dialog das Medium auch formatiert obwohl es im Explorer in Verwendung ist.
.
Klar kann man den Datenträger auch per Hand formatieren. Ebenso könnte man dann auch die Dateien danach händisch kopieren.hum4n0id3 hat geschrieben: ↑So 26. Jun 2022, 10:01- Medium einlegen und wenn es im Datei-Manager erscheint ("This PC") dann einen rechtsklick drauf und im Kontext-Menü, Format auswählen und formatieren.
oder (falls zb. das Medium nicht erscheinen sollte),
- "Disk Manager" starten und dort sollte das Medium mit seiner Partitionierung auftauchen. Dort kann man dann alle Partitionen löschen auf dem Medium löschen, neue erstellen usw.
Das ist aber nicht der Sinn des Programmes.
Das Programm nimmt dem Benutzer alles ab. Nach dem der User das entsprechende Fahrzeug ausgewählt hat drückt er auf "Start" und der Datenträger wird entsprechend der Vorgabe mit dem im Programm hinterlegten bzw. benötigten FileSystem formatiert und im Anschluß werden die benötigten Daten auf den Datenträger kopiert.
Die so erstellten Datenträger kommen dann zum Update der Navigationsgeräte in Fahrzeugen zum Einsatz, so dass ich nicht möchte, dass die Mechaniker noch überlegen müssen, wie und mit welchen Einstellungen sie die SD-Karte oder den USB-Stick formatienen müssen und aus welchen Verzeichnissen die Daten kopiert werden sollen.
Das Formatieren via FormatEx() funktioniert ja gererell, nur jedoch momentan noch nicht, wenn von anderer Stelle aus auf den Inhalt des zu formatierenden Datenträgers zugegriffen wird.
Es muss ja eine Möglichkeit geben, da ja der interne Format-Dialog das Medium auch formatiert obwohl es im Explorer in Verwendung ist.
.
Re: Problem beim Formatieren eines Datenträgers
Bin auf Linux und habe keine Ahnung, aber wer komisches Zeug machen will muss halt WinAPI googeln.
Z.B.
https://docs.microsoft.com/en-us/window ... unt_volume
Z.B.
https://docs.microsoft.com/en-us/window ... unt_volume
-
- Beiträge: 177
- Registriert: Mi 2. Sep 2015, 11:09
- OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
- CPU-Target: Windows 32/64bit
Re: Problem beim Formatieren eines Datenträgers
Hallo zusammen,
Da sieht man deutlich, dass Linux-User deutlich öfter mit dem mounten von Laufwerken konfrontiert werden.
Herzlichen Dank ersteinmal an Theo für den Link und den Gedankenansatz.
Was ich dort in der Doku beim Überfliegen gelesen habe kommt der Problemstellung / Lösung schon recht nahe.
Ich werde dies die Tage austesten und dann berichten!
.
Die Doku zu DeviceIoControl hatte ich mir bereits zum Teil schon zu Gemüte geführt, jedoch bin ich nicht bewusst auf FSCTL_DISMOUNT_VOLUME gestossen.
Für einen Linuxer ganz schön fit im Bezug auf die WinAPI.
Da sieht man deutlich, dass Linux-User deutlich öfter mit dem mounten von Laufwerken konfrontiert werden.
Herzlichen Dank ersteinmal an Theo für den Link und den Gedankenansatz.
Was ich dort in der Doku beim Überfliegen gelesen habe kommt der Problemstellung / Lösung schon recht nahe.
Ich werde dies die Tage austesten und dann berichten!
.
Re: Problem beim Formatieren eines Datenträgers
Du hast ja auch mit keinem Wort erwähnt das du es für ein Programm gebraucht hast.
-
- Beiträge: 177
- Registriert: Mi 2. Sep 2015, 11:09
- OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
- CPU-Target: Windows 32/64bit
Re: Problem beim Formatieren eines Datenträgers
Hallo zusammen,
Ich dachte eigentlich dass es klar wäre, dass die Funktionen in einem Programm aufrufbar seien.
.
Ich dachte eigentlich dass es klar wäre, dass die Funktionen in einem Programm aufrufbar seien.
.
Re: Problem beim Formatieren eines Datenträgers
Näh… außerdem bin ich über „aktuelle Beiträge“ hier gelandet und sah nicht, wo der Thread angelegt worden ist. Somit nicht bedacht das du es für ein Programm haben wolltest.
Passiert.
Passiert.
-
- Beiträge: 177
- Registriert: Mi 2. Sep 2015, 11:09
- OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
- CPU-Target: Windows 32/64bit
[gelöst] Problem beim Formatieren eines Datenträgers
Hallo zusammen,
aufgrund des Hinweises von Theo konnte ich das Problem lösen. Danke dafür.
So wie die ersten Tests zeigen ist der Aufruf von DeviceIoControl() mit dem ControlCode FSCTL_DISMOUNT_VOLUME exakt das was ich gesucht habe.
Das einzige was mir bislang noch negativ auffiel ist die Tatsache, dass nach dem Dismount und dem Formatieren durch mein Programm im Windows-Explorer immer noch die "alten" Dateien angezeigt werden bis man das entsprechende Laufwerk neu anklickt.
Da muss ich mal schauen, ob ich noch eine Message hinterherschicken muss, dass der Inhalt des Laufwerkes geändert wurde.
@hum4n0id3: Alles kein Problem
Und nochmals vielen Dank für Eure schnelle Unterstützung.
.
aufgrund des Hinweises von Theo konnte ich das Problem lösen. Danke dafür.
So wie die ersten Tests zeigen ist der Aufruf von DeviceIoControl() mit dem ControlCode FSCTL_DISMOUNT_VOLUME exakt das was ich gesucht habe.
Das einzige was mir bislang noch negativ auffiel ist die Tatsache, dass nach dem Dismount und dem Formatieren durch mein Programm im Windows-Explorer immer noch die "alten" Dateien angezeigt werden bis man das entsprechende Laufwerk neu anklickt.
Da muss ich mal schauen, ob ich noch eine Message hinterherschicken muss, dass der Inhalt des Laufwerkes geändert wurde.
@hum4n0id3: Alles kein Problem
Und nochmals vielen Dank für Eure schnelle Unterstützung.
.
-
- Beiträge: 834
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: [gelöst] Problem beim Formatieren eines Datenträgers
Du könntest dafür IOCTL_DISK_UPDATE_PROPERTIES nutzen, allerdings musst du das auf die physische Disk, statt auf das Volume machen. Die physische Disk kannst du über IOCTL_STORAGE_GET_DEVICE_NUMBER erhalten, die du dann als „\\.\PhysicalDriveX” (mit X gleich der Nummer, die du von IOCTL_STORAGE_GET_DEVICE_NUMBER in STORAGE_DEVICE_NUMBER.DeviceNumber erhalten hast) öffnest.TBug hat geschrieben: ↑Mo 27. Jun 2022, 18:28Das einzige was mir bislang noch negativ auffiel ist die Tatsache, dass nach dem Dismount und dem Formatieren durch mein Programm im Windows-Explorer immer noch die "alten" Dateien angezeigt werden bis man das entsprechende Laufwerk neu anklickt.
Da muss ich mal schauen, ob ich noch eine Message hinterherschicken muss, dass der Inhalt des Laufwerkes geändert wurde.
FPC Compiler Entwickler
-
- Beiträge: 177
- Registriert: Mi 2. Sep 2015, 11:09
- OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
- CPU-Target: Windows 32/64bit
Re: [gelöst] Problem beim Formatieren eines Datenträgers
Das sieht sehr interessant und brauchbar aus.PascalDragon hat geschrieben: ↑Di 28. Jun 2022, 14:00Du könntest dafür IOCTL_DISK_UPDATE_PROPERTIES nutzen
Danke für den Hinweis.PascalDragon hat geschrieben: ↑Di 28. Jun 2022, 14:00allerdings musst du das auf die physische Disk, statt auf das Volume machen.
Ist mir bein ersten flüchtigen Durchlesen nicht einmal bewußt aufgefallen, dass dort in der Beschreibung steht, dass DeviceIoControl bei IOCTL_DISK_UPDATE_PROPERTIES IOCTL das Device-Handle und nicht das Volume-Handle verlangt.
Werde es am Wochenende mal integrieren und testen und berichten.
Danke dafür.
.