2009-08-05 4 views
3

Ich möchte eine SD-Karte mit FAT16-Dateisystem initialisieren. Angenommen, ich habe meinen SD-Reader auf Laufwerk G :, wie kann ich es leicht zu FAT16 formatieren?Wie programmiere ich eine SD-Karte mit FAT16?

UPDATE: Um zu klären, würde Ich mag, dass C# in einer Art und Weise unter Verwendung von auf .NET-Plattform zu tun, dass ich Fehler erkennen kann, und das würde unter Windows XP arbeiten und darüber.

+0

Bedenkt man, dass die Frage C# markiert und .net, ich nehme an, dies programmatisch zu tun ist. Daher gehört diese Frage nicht zum Superuser (es gab eine enge Abstimmung dafür). – balpha

+2

Wie meinst du "gehören auf Superuser"? –

+0

balpha sagte _not_ auf Superuser. Siehe unten auf dieser Seite für SU –

Antwort

3

habe ich versucht, die oben genannte Antworten, leider ist es nicht so einfach war, wie es ...

Die erste Antwort scheint, mit dem Management-Objekt wie die richtige Art und Weise sieht so zu tun, aber leider ist die „Format“ Methode ist nicht unterstützt in Windows XP.

Die zweite und die dritte Antworten arbeiten aber muss der Benutzer den Vorgang bestätigen.

Damit ich von dem Benutzer ohne Intervention zu tun, um die zweite Option verwendet, um die Eingangs- und Ausgangsströme des Prozesses mit umleitet. Wenn ich nur den Eingabestream umleite, ist der Prozess fehlgeschlagen.

Es folgt ein Beispiel:

DriveInfo[] allDrives = DriveInfo.GetDrives(); 
foreach (DriveInfo d in allDrives) 
{ 
    if (d.IsReady && (d.DriveType == DriveType.Removable)) 
    { 
     ProcessStartInfo startInfo = new ProcessStartInfo(); 
     startInfo.FileName = "format"; 
     startInfo.Arguments = "/fs:FAT /v:MyVolume /q " + d.Name.Remove(2); 
     startInfo.UseShellExecute = false; 
     startInfo.CreateNoWindow = true; 
     startInfo.RedirectStandardOutput = true; 
     startInfo.RedirectStandardInput = true; 

     Process p = Process.Start(startInfo); 

     StreamWriter processInputStream = p.StandardInput; 
     processInputStream.Write("\r\n"); 

     p.WaitForExit(); 

    } 
} 
+2

Ich muss "Format" zu "Format.com" ändern oder es meldet, dass die Datei nicht existiert. (Windows XP SP3) – jhlllnd

+0

@jhlllnd Ich musste das gleiche unter Windows 7 tun. Danke. – Lander

1

kann keine Funktion in Driveinfo et al finden, aber man kann immer verwenden (create) eine Batch-Datei Format G: /FS:FAT enthält, und starten Sie es mit System.Diagnostics.Process

1

Sie Vorausgesetzt wird, wie tatsächlich gefragt, dies zu tun in C# (von dem Tag haben Sie auf die Frage angewendet):

ich glaube nicht, dass es einen Rahmen Art und Weise ist ein Laufwerk formatiert werden kann, so dass Sie nach dem Vorbild der

zu etwas zurück fallen müssen möglicherweise
ProcessStartInfo processStartInfo = new ProcessStartInfo(); 
processStartInfo.FileName = "format"; 
processStartInfo.Arguments ="/FS:FAT G:"; 
Process.Start(processStartInfo); 

dies ist jedoch ein pret In diesem Fall können Sie ohne Analyse der Ausgabe nicht feststellen, ob dies erfolgreich war. Ich würde insgesamt vorsichtig sein und sich fragen, ob Sie wirklich ein Format innerhalb Ihrer Anwendung zulassen möchten.

3

könnten Sie pinvoke to call SHFormatDrive verwenden.

[DllImport("shell32.dll")] 
static extern uint SHFormatDrive(IntPtr hwnd, uint drive, uint fmtID, uint options); 

public enum SHFormatFlags : uint { 
    SHFMT_ID_DEFAULT = 0xFFFF, 
    SHFMT_OPT_FULL = 0x1, 
    SHFMT_OPT_SYSONLY = 0x2, 
    SHFMT_ERROR = 0xFFFFFFFF, 
    SHFMT_CANCEL = 0xFFFFFFFE, 
    SHFMT_NOFORMAT = 0xFFFFFFD, 
} 

//(Drive letter : A is 0, Z is 25) 

uint result = SHFormatDrive(this.Handle, 
       6, // formatting C: 
       (uint)SHFormatFlags.SHFMT_ID_DEFAULT, 
       0); // full format of g: 
if (result == SHFormatFlags.SHFMT_ERROR) 
    MessageBox.Show("Unable to format the drive"); 
+0

Jeder sicherere Weg zur Umwandlung von G: nach 6 als "G:" [0] - 'A'? –

+0

Wie kann ich sicher sein, dass SHFMT_ID_DEFAULT fat16 nicht 32 ist? –

+0

Haben Sie diesen Hinweis auf MSDN bemerkt?Diese Funktion ist über das Windows XP Service Pack 2 (SP2) verfügbar und Windows Server 2003. Es könnte –

1

Es gibt eine Vielzahl von Antworten ist here

Die WMI-Methode scheint nicht zu einem C# Beispiel zu haben, aber ich hatte um die Jagd und konstruiert dies:

ManagementObject disk = new ManagementObject("SELECT * FROM Win32_Volume WHERE Name = 'G:\\\\'"); 
disk.Get(); 
disk.InvokeMethod("Format", new object[] {"FAT", false, 4096, "TheLabel", false}); 

I don‘ t haben ein Laufwerk Ersatz, um dies zu testen, so könnte die Clustergröße falsch sein.

Siehe here für weitere Informationen.

+0

Können Sie die WMI-Methode zu Ihrer Antwort aus dem Artikel kopieren, damit ich Ihre Antwort akzeptieren kann? Ich denke, es ist besser, die Antwort in stackoverflow zu haben, falls der ursprüngliche Beitrag gelöscht wird. –

+0

Ich konnte die Format-Methode nicht wie beschrieben ausführen, daher verwenden wir die format.exe mit Parametern. –

+0

Die folgende Notiz aus [MSDN Library] (http://msdn.microsoft.com/en-us/library/aa394515%28v=VS.85%29.aspx) zu beachten: „Windows XP und früher: Diese Klasse ist nicht verfügbar." – lordhog

Verwandte Themen