Я хочу к формату (FAT32) съемный диск с программированием c#. В Интернете я нашел путь, но проблема состоит в том, что он открывает универсальную программу формата окон. Но я хочу сделать это с C# только и не созданный в поддержке окон.
Мой метод:
// FAT32 Format Button click event
[DllImport("shell32.dll")]
static extern uint SHFormatDrive(IntPtr hwnd, uint drive, uint fmtID, uint options);
Я не верю, что в C# есть что-то, что может универсально выполнить форматирование диска любого формата. Метод, который вы используете, вероятно, является лучшим способом сделать это в Windows.
Если вы хотите, чтобы он был действительно общим, вам все равно понадобится какой-то специфический для платформы метод получения доступа к аппаратному обеспечению для выполнения работы. C# предоставит вам только стандартную функциональность ввода/вывода.
Вы можете поискать сторонние библиотеки, которые являются кроссплатформенными, если это действительно то, что вам нужно. Есть шанс, что имеющееся у вас решение может работать и на других платформах (например, mono), хотя я о них мало что знаю.
Вы можете использовать wmi , есть способ, позволяющий это сделать.
http://msdn.microsoft.com/en-us/library/aa390432%28v=VS.85%29.aspx
SHFormatDrive
- это высокоуровневая обертка для API под названием DeviceIoCtl
, который используется на уровне драйвера для выполнения таких действий, как форматирование дисков. Вы не сможете обойти диалог, поскольку он, очевидно, разработан как метод оболочки, включающий графический интерфейс.
Я не знаю, что, кроме собственно p/invoke'ng DeviceIoCtl
, можно здесь использовать. У Марка Руссиновича (известного в SysInternals) раньше была утилита под названием "FormatX", которая делала на NT4 то же, что DeviceIOCtl делает на более поздних версиях, но, похоже, она была снята с производства, исходники и все такое. Я думаю, что лучшим вариантом будет создание отдельного процесса командной оболочки, вызывающего утилиту format
с правильными параметрами. Просто откройте консоль и введите format /?
, чтобы получить представление. Конечно, вы можете использовать System.Diagnostics.Process, чтобы сделать это с помощью командного интерпретатора (с cmd.exe /c
).