Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi USB Stick formatiern (https://www.delphipraxis.net/28928-usb-stick-formatiern.html)

Nightfly 1. Sep 2004 12:19


USB Stick formatiern
 
Kann ich das mit Delphi machen? Das auf knopfdruck ohne weiteres nachfragen der Stick (laufwerk wird zuvor abgefragt) formatiert wird?

Matze 1. Sep 2004 12:21

Re: USB Stick formatiern
 
Formatieren könne schwierig werden, wenn du einfach alles löschen willst, benutze z.B. Delphi-Referenz durchsuchenDeleteFile.

Nightfly 1. Sep 2004 12:23

Re: USB Stick formatiern
 
Ich hatte es aber auch schon das sich dateien nicht löschen ließen...u.a. wenn der stick vorschnell abgezogen wurde. Da half dan ein formatieren über den Arbeitsplatz...kann ich diese funktion von Windows nich in delphi einbauen?

Matze 1. Sep 2004 12:27

Re: USB Stick formatiern
 
Ich hab hier was gefunden.

Aber Achtung:
MP3-USB-Sticks (MP3-Player) sollten meist nicht von Windows aus formatiert werden, sonder nur mit der mitgelieferten SOftware, da sonst teilweise die Firmware gelöscht werden kann und sich der MP3-Player dann keine MP3 mehr wiedergeben kann.

Nur so am Rande, falls es ein MP3-Player ist. ;)

Nightfly 1. Sep 2004 12:31

Re: USB Stick formatiern
 
nein, sind stinknormale USB sticks die von kunden NUR zu datensicherung verwendet werden SOLLTEN...ich weiß aber schon wieder das die selber zeugs draufmachen, und dann anrufen warum die sicherung nicht geht. also will ich beim sichern: falls voll, entbehrliche alte sicherungen löschen (mach ich sowieso)..wenn nachher immer noch kein platz is...warnung ausgeben und dann plattmachen *hrrhrr*

Nightfly 1. Sep 2004 12:41

Re: USB Stick formatiern
 
HAb mir jetzt mal den COde zu gemüte geführt...leider versteh ich das mit den konstanten nich...wo kann ich ein laufwerk auswählen? warum gibt es SHFMT_DRV_A = 0; UND SHFMT_DRV_B = 1; ??? Logisch wäre mir EINE variable die den LW Buchstaben übergibt...*verwirtbin*

Matze 1. Sep 2004 12:56

Re: USB Stick formatiern
 
Zitat:

Zitat von Nightfly
verwirtbin*

mee too :mrgreen:

Ich glaube es ist so (ohne Gewähr, mach ein Backup. :lol:

Eventuell so:
Laufwerk A: SHFMT_DRV_A = 0
Laufwerk B: SHFMT_DRV_B = 1
Laufwerk C: SHFMT_DRV_B = 2
Laufwerk D: SHFMT_DRV_B = 3

...

fiasko 1. Sep 2004 12:56

Re: USB Stick formatiern
 
Zitat:

Zitat von Nightfly
Logisch wäre mir EINE variable die den LW Buchstaben übergibt...*verwirtbin*

Ist doch nur eine :-) - die SHFMT_DRV_* sind ja nur Konstanten für die Laufwerksnummern. Mußt also nurnoch die Nummer für den USB-Stick rausbekommen - ich glaube die Platten gingen dann bei 80h oder so los... aber ließ das lieber mal irgendwo nach bevor du das falsche Plattmachst :stupid:

Matze 1. Sep 2004 13:00

Re: USB Stick formatiern
 
Dazu näheres in derCode-Library. ;)

Prüfe einfach, ob das Laufwerk ein DRIVE_REMOVABLE ist, dann werden schonmal alles Wechseldatenträger aufgelistet. Ausschließen kannst du dann schonmal Buchstabe A und B.

HW764 1. Sep 2004 13:02

Re: USB Stick formatiern
 
Geht sicher auch mit dem Disketten Formatierung Kommando :-D
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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 Uhr.
Seite 1 von 2  1 2      

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