我想用FAT16文件系统初始化SD卡。 假设我在驱动器G上有我的SD读卡器,我怎样才能轻松地将它格式化为FAT16?
更新:为了澄清,我想在.net平台上使用C#做到这一点,我可以检测到错误,这将在Windows XP和以上的工作。
我尝试了上面的答案,不幸的是它并不简单,因为它似乎…
第一个答案,使用管理对象看起来像这样做的正确方式,但不幸的是,“格式”方法不支持在Windows XP中。
第二个和第三个答案正在工作,但要求用户确认操作。
为了做到这一点,没有任何用户干预,我使用第二个选项重定向进程的输入和输出流。 当我只重定向输入流时,进程失败。
以下是一个例子:
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(); } }
您可以使用pinvoke来调用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" );
无法在DriveInfo等中找到函数,但可以始终使用(创建)包含Format G: /FS:FAT
的批处理文件,并使用System.Diagnostics.Process
假设你实际上正在问如何在C#中完成这个工作(从你应用到问题的标签):
我不相信有一个格式化驱动器的框架方式,所以你可能不得不倒退到沿线的东西
ProcessStartInfo processStartInfo = new ProcessStartInfo(); processStartInfo.FileName = "format"; processStartInfo.Arguments ="/FS:FAT G:"; Process.Start(processStartInfo);
然而,这是一个非常脆弱的做法,如果没有解析输出,你可能无法判断这是否成功。 我会整体谨慎,并问自己,如果你真的想在你的应用程序中允许格式。
这里有很多答案
WMI方法似乎没有C#的例子,但我有一个寻找和构建这个:
ManagementObject disk = new ManagementObject("SELECT * FROM Win32_Volume WHERE Name = 'G:\\\\'"); disk.Get(); disk.InvokeMethod("Format", new object[] {"FAT", false, 4096, "TheLabel", false});
我没有备用驱动器来测试它,所以群集大小可能是错误的。
在这里看到更多的信息。