(Gast)
n/a Beiträge
|
Re: USB Stick formatiern
1. Sep 2004, 14:02
Geht sicher auch mit dem Disketten Formatierung Kommando
Delphi-Quellcode:
function TMainform.Diskette_formatieren(Laufwerk: String): Integer;
var
Befehl : String;
Datei : TextFile;
TempDateiName : Array [0..255] of Char;
TempVerzeichnis : Array [0..255] of Char;
StartupInfo : TStartupInfo;
ProcessInfo : TProcessInformation;
SektorenProCluster : Integer;
BytesProSektor : Integer;
FreieCluster : Integer;
ClusterInsgesamt : Integer;
Temp : Integer;
begin
// Datei zum Beantworten der Abfragen von FORMAT.EXE
// im Temp-Verzeichnis anlegen.
GetTempPath(255, TempVerzeichnis);
GetTempFileName(TempVerzeichnis, 'TMP', 0, TempDateiName);
// Antwort-Datei erzeugen
AssignFile(Datei, TempDateiName);
Rewrite(Datei); // Antwort-Datei erzeugen und öffnen
Writeln(Datei, #13#10); // 1. Return ("Diskette einlegen ...")
Writeln(Datei, #13#10); // 2. Return (Diskettenbezeichnung)
Writeln(Datei, 'n'#13#10); // keine weitere Diskette
CloseFile(Datei); // Datei schließen
// Befehlszeile zum Aufrufen von FORMAT.COM
// command.com /c = automatisch nach Beendigung schließen
// format ... /u = unbedingt formatieren
// format ... /c = defekte Sektoren prüfen
Befehl := 'command.com /c format '+Laufwerk+' /u /c < '+TempDateiName;
// StartupInfo initialisieren.
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
StartupInfo.cb := SizeOf(TStartupInfo);
// DOS-Fenster soll nicht angezeigt werden.
StartupInfo.dwFlags := StartF_UseShowWindow;
StartupInfo.wShowWindow := SW_Hide;
// Formatieren
if CreateProcess(nil, PChar(Befehl), nil, nil,
False, 0, nil, 'c:\',
StartupInfo,
ProcessInfo) then begin
// Warten bis Format beendet ist.
WaitForSingleObject(ProcessInfo.hProcess, Infinite);
CloseHandle(ProcessInfo.hProcess);
end;
// Antwort-Datei wieder löschen
DeleteFile(TempDateiName);
// War das Formatieren erfolgreich?
if GetDiskFreeSpace(PChar(Laufwerk), SektorenProCluster,
BytesProSektor, FreieCluster,
ClusterInsgesamt) then begin
// Anzahl defekter Sektoren berechnen
Temp := FreieCluster * SektorenProCluster * BytesProSektor;
Result := (1457664 - Temp) div BytesProSektor;
end
else
// Diskette nicht eingelegt oder unformatiert
Result := - 1;
end;
|
|
Zitat
|