![]() |
USB-Laufwerk formatieren
Ich möchte Daten auf einen USB-Datenträger kopieren. Ist dieser vorher nicht leer, frage ich nach, ob er formatiert werden soll. Dazu benutze ich SHFormatDrive. Das funktioniert auch im Prinzip, allerdings habe ich während meiner Tests gelegentlich das Phänomen, dass nach dem UAC-Dialog die Caption meines Formulars (dessen Handle ich an SHFormatDrive übergebe) geändert und SHFMT_ERROR zurückgegeben wird. Leider ist das nicht reproduzierbar, könnte das daran liegen, dass ich in einer VM aus einem Mac entwickle und das USB-Durchschleifen nicht immer zu 100% klappt? Mich macht insbesondere stutzig, dass die Funktion meine Caption anfasst. Achja, hier mein Code (von SO kopiert und etwas angepasst):
Delphi-Quellcode:
[edit] Ein 2. Aufruf funktioniert bislang immer, ich habe den Eindruck, das könnte evtl. an den Energiesparoptionen liegen. [/edit]
const
SHFMT_DRV_A = 0; SHFMT_DRV_B = 1; SHFMT_ID_DEFAULT = $FFFF; SHFMT_OPT_QUICKFORMAT = 0; SHFMT_OPT_FULLFORMAT = 1; SHFMT_OPT_SYSONLY = 2; SHFMT_ERROR = -1; SHFMT_CANCEL = -2; SHFMT_NOFORMAT = -3; function SHFormatDrive( hWnd: hWnd; Drive: UINT; fmtID: UINT; Options: UINT ): DWORD; stdcall; external 'Shell32.dll'; procedure TfrmWizard.FormatDrive(const ADrive: string); var FmtRes: Longint; cCharTemp: Char; nDrive: UINT; begin if (ADrive = '') or not DirectoryExists(ADrive) then Exit; cCharTemp := AnsiUpperCase(ADrive)[1]; if GetDriveType(PChar(cCharTemp + ':\')) <> DRIVE_REMOVABLE then Exit; nDrive := Ord(cCharTemp) - Ord('A'); try FmtRes := SHFormatDrive(Handle, nDrive, SHFMT_ID_DEFAULT, SHFMT_OPT_QUICKFORMAT); case FmtRes of SHFMT_ERROR: raise Exception.Create ('Während der Formatierung ist ein Fehler aufgetreten.'); SHFMT_CANCEL: raise Exception.Create('Formatierung durch Benutzer abgebrochen.'); SHFMT_NOFORMAT: raise Exception.Create('Der Datenträger kann nicht formatiert werden.'); end; ... except on E: Exception do begin ... MessageBox(0, PChar(E.Message), 'Fehler', MB_OK or MB_ICONERROR); end; end; end; |
AW: USB-Laufwerk formatieren
Der Zugriff auf USB-Datenträger klappt bei meinem ollen Laptop auch nicht immer auf Anhieb. Erst der Zweite klappt dann immer.
Ursachen: Energiesparoptionen aber auch: Rechner aus dem Ruhezustand aufwecken, Benutzer abmelden und später wieder anmelden, sonstige längere Pausen (zumindest im Begriff auf den Zugriff auf den entsprechenden Datenträger) ... Es gibt wohl Situationen, in denen die Verbindung zu den USB-Datenträger getrennt wird, ohne dass das zum Anwender kommuniziert wird. Auch Explorer, Windows- bzw. Total-Commander (und Co.) zeigen die Datenträger an, aber ein sofortiger Zugriff ist nicht möglich. Erst der zweite funktioniert dann. Im Zweifelsfalle vor dem Formatieren einen Lesezugriff machen, z. B. mit FindFirst auf das Hauptverzeichnis oder sowas in der Art. |
AW: USB-Laufwerk formatieren
Eventuell ist es ja auch die Energiesparfunktion des Festplatten-Controllers. Viele externe HDDs legen sich automatisch nach einer gewissen Zeit schlafen. Da kann Windows dann auch nix daran ändern. Es sei denn es würden immer wieder irgendwelche Dummy-Zugriffe darauf gemacht.
|
AW: USB-Laufwerk formatieren
Zitat:
Danke |
AW: USB-Laufwerk formatieren
Zitat:
~ O-Ton:"Intel geht nach jedem Pups sofort wieder schlafen" (Im Prinzip verständlich, gerade im Laptopbereich.) ~ andere machen es offenbar lockerer Wäre dann die Frage, wie das OS seitig gehandhabt wird. Wenn man keine einheitliche Implementierung auf Treiberseite voraussetzen kann, muss das OS es machen oder Du. Vielleicht gibt es ja "AufweckAPI". |
AW: USB-Laufwerk formatieren
Zitat:
Gruß K-H |
AW: USB-Laufwerk formatieren
Liste der Anhänge anzeigen (Anzahl: 1)
|
AW: USB-Laufwerk formatieren
Danke, aber so weit möchte ich gar nicht gehen. Trotzdem werde ich den Link mal im Hinterkopf behalten, sieht ja nicht uninteressant aus.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 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-2025 by Thomas Breitkreuz