我想用c#编程格式化(FAT32)可移动驱动器。在互联网上我找到了一种方法,但问题是它打开了通用的Windows格式程序。但是我想只使用C#,而不是内置的Windows支持。
我的方法是:
// FAT32 Format Button click event
[DllImport("shell32.dll")]
static extern uint SHFormatDrive(IntPtr hwnd, uint drive, uint fmtID, uint options);
答案 0 :(得分:4)
您可以使用wmi,有一种方法可以实现此目的。
http://msdn.microsoft.com/en-us/library/aa390432%28v=VS.85%29.aspx
答案 1 :(得分:1)
我不相信C#中会有任何格式的驱动器格式化。您拥有的方法可能是在Windows上执行此操作的最佳方法。
如果您希望它真正通用,您仍然需要一些特定于平台的方法来访问硬件来完成这项工作。 C#只会为您提供标准的I / O功能。
如果你真正想要的话,你可以寻找跨平台的第三方库。有可能你可能在其他平台上工作的解决方案(例如单声道),虽然我对它们知之甚少。
答案 2 :(得分:0)
SHFormatDrive
是名为DeviceIoCtl
的API的高级包装器,它在驱动程序级别用于执行格式化驱动器之类的操作。您将无法绕过对话框,因为它显然是设计为包含GUI的shell方法。
我不知道你在这里可以使用的实际p / invoke'ng DeviceIoCtl
之外的内容。 Mark Russinovich(SysInternals成名)曾经有一个名为“FormatX”的实用程序,它可以在NT4上执行DeviceIOCtl在更高版本上执行的操作,但这似乎已经完成,源代码和所有内容。我认为您最好的办法是创建一个单独的命令shell进程,使用正确的参数调用format
实用程序。只需打开一个控制台并输入format /?
即可获得一个想法。您当然可以使用 System.Diagnostics.Process 使用命令解释器(使用cmd.exe /c
)执行此操作。
答案 3 :(得分:0)
通过WMI工作得很好:
var query = String.Format("SELECT * FROM Win32_Volume WHERE Name = '{0}'", "E:\\\\");
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", query);
var queryCollection = from ManagementObject x in searcher.Get() select x;
var volume = queryCollection.FirstOrDefault();
var resultCode = volume.InvokeMethod("Format", new object[] { "FAT32", true, 4096, "Volume Name", false });