微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以编程方式格式化FAT16的SD卡?

我想用FAT16文件系统初始化SD卡。 假设我在驱动器G上有我的SD读卡器,我怎样才能轻松地将它格式化为FAT16?

更新:为了澄清,我想在.net平台上使用C#做到这一点,我可以检测到错误,这将在Windows XP和以上的工作。

Windows应用程序的风格化安装程序

学习Windows生态系统的最佳途径是什么?

.NET:发送文本消息到同一个应用程序的所有实例并读取它

在标准C ++或C#上使用C ++ / CLI有什么好处吗?

在同一进程中创build的所有其他线程之后停止线程

我尝试了上面的答案,不幸的是它并不简单,因为它似乎…

一个答案,使用管理对象看起来像这样做的正确方式,但不幸的是,“格式”方法不支持在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("rn"); 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});

我没有备用驱动器来测试它,所以群集大小可能是错误的。

在这里看到更多的信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐