2009-08-05 14 views
3

Je voudrais initialiser une carte SD avec le système de fichiers FAT16. En supposant que j'ai mon lecteur SD sur le lecteur G :, comment puis-je facilement le formater en FAT16?Comment formater une carte SD avec FAT16?

MISE À JOUR: Pour clarifier les choses, j'aimerais faire sur la plateforme .net en C# de manière que je puisse détecter les erreurs et qui fonctionnerait sous Windows XP et plus.

+0

Considérant que la question est étiquetée C# et .net, je suppose que cela doit être fait par programme. Par conséquent, cette question n'appartient pas au super-utilisateur (il y a eu un vote serré pour cela). – balpha

+2

Comment voulez-vous dire "appartenir au super-utilisateur"? –

+0

balpha a indiqué _not_ sur le superutilisateur. Voir le bas de cette page pour SU –

Répondre

3

J'ai essayé les réponses ci-dessus, malheureusement, il n'a pas été simple car il semble ...

La première réponse, en utilisant l'objet de gestion ressemble à la bonne façon de le faire, mais malheureusement, la méthode « Format » est pas pris en charge dans Windows XP.

La deuxième et la troisième réponses fonctionnent mais nécessitent que l'utilisateur confirme l'opération.

Pour ce faire sans aucune intervention de l'utilisateur, j'ai utilisé la deuxième option avec la redirection des flux d'entrée et de sortie du processus. Lorsque je redirige uniquement le flux d'entrée, le processus a échoué.

Voici un exemple:

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

Je dois changer "format" en "format.com" ou il signale que le fichier n'existe pas. (Windows XP SP3) – jhlllnd

+0

@jllllnd Je devais faire de même sur Windows 7. Merci. – Lander

1

Impossible de trouver une fonction dans DriveInfo et al, mais vous pouvez toujours utiliser (créer) un fichier batch contenant Format G: /FS:FAT et commencer avec System.Diagnostics.Process

1

En supposant que vous demandez réellement comment faire en C# (de l'étiquette que vous avez appliqué à la question):

Je ne crois pas qu'il y ait un moyen-cadre de formatage d'un disque, de sorte que vous devrez peut-être revenir à quelque chose le long des lignes de

ProcessStartInfo processStartInfo = new ProcessStartInfo(); 
processStartInfo.FileName = "format"; 
processStartInfo.Arguments ="/FS:FAT G:"; 
Process.Start(processStartInfo); 

Cependant, ceci est un pré C'est une manière fragile de le faire, et sans analyser la sortie, vous ne pourrez peut-être pas dire si cela a été un succès. Je ferais preuve de prudence dans l'ensemble et me demanderais si vous voulez vraiment autoriser un format dans votre application.

3

Vous pouvez utiliser pinvoke to call SHFormatDrive.

[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

Une façon plus sûre de convertir G: à 6 que "G:" [0] - 'A'? –

+0

Comment puis-je être sûr que SHFMT_ID_DEFAULT est fat16 pas 32? –

+0

Avez-vous remarqué cette note sur MSDN?Cette fonction est disponible via Windows XP Service Pack 2 (SP2) et Windows Server 2003. Elle peut être modifiée ou indisponible dans les versions ultérieures de Windows –

1

Il y a une foule de réponses here

La méthode WMI ne semble pas avoir un exemple C# mais j'avais une chasse autour et construit ceci:

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

Je ne t avoir un disque de rechange pour tester cela, donc la taille du cluster pourrait être fausse.

Voir here pour plus d'informations.

+0

Pourriez-vous copier la méthode WMI à votre réponse de l'article afin que je puisse accepter votre réponse? Je pense qu'il est préférable d'avoir la réponse dans stackoverflow au cas où le post original est supprimé. –

+0

Je n'ai pas pu exécuter la méthode Format comme décrit, donc nous utilisons finalement le format.exe avec les paramètres. –

+0

La note suivante de [MSDN Library] (http://msdn.microsoft.com/en-us/library/aa394515%28v=VS.85%29.aspx) doit être notée: «Windows XP et versions antérieures: cette classe n'est pas disponible." – lordhog

Questions connexes