【问题标题】:Format Removable media with c# programming使用 c# 编程格式化可移动媒体
【发布时间】:2010-07-13 18:48:17
【问题描述】:

我想用 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);

【问题讨论】:

  • 那我想你需要学习如何自己实现它。
  • 不要自己写。你不知道怎么做。如果你在这里问这个问题,你肯定不知道怎么做。事实上,你甚至想重新实现这一点,这表明你真的没有充分的理由这样做,无论你做什么都会是坏的、坏的和错误的。

标签: c# .net .net-3.5


【解决方案1】:

你可以使用wmi,有一种方法可以做到这一点。

http://msdn.microsoft.com/en-us/library/aa390432%28v=VS.85%29.aspx

【讨论】:

  • 虽然这不是 C# 语言中的东西。它是 .NET CLR,我怀疑特定于 Windows。但是,如果 Rafayan 想要的只是托管调用,那么这就是一种解决方案(虽然调用 WMI 而不是仅仅调用互操作,但会占用大量资源)。
【解决方案2】:

我不相信 C# 中有任何东西可以通用地进行任何格式的驱动器格式化。您拥有的方法可能是在 Windows 上执行此操作的最佳方法。

如果您希望它真正通用,您仍然需要一些特定于平台的方法来访问硬件来完成这项工作。 C# 只会为您提供标准的 I/O 功能。

如果你真的想要的话,你可以寻找跨平台的第三方库。尽管我对它们了解不多,但您的解决方案可能无论如何都可以在其他平台上运行(例如单声道)。

【讨论】:

    【解决方案3】:

    SHFormatDrive 是名为DeviceIoCtl 的 API 的高级包装器,它在驱动程序级别用于执行格式化驱动器等操作。您将无法绕过该对话框,因为它显然被设计为包含 GUI 的 shell 方法。

    我不知道除了 p/invoke'ng DeviceIoCtl 你可以在这里使用什么。 Mark Russinovich(以 SysInternals 出名)曾经有一个名为“FormatX”的实用程序,它可以在 NT4 上执行 DeviceIOCtl 在更高版本上执行的操作,但它似乎已经停止,源代码和所有内容。我认为您的另一个最佳选择是创建一个单独的命令 shell 进程,该进程使用正确的参数调用 format 实用程序。只需打开一个控制台并输入format /? 即可获得灵感。您当然可以使用 System.Diagnostics.Process 通过命令解释器(使用 cmd.exe /c)来执行此操作。

    【讨论】:

      【解决方案4】:

      通过 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 });
      

      【讨论】:

      猜你喜欢
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 2013-02-28
      相关资源
      最近更新 更多