Я попробовал ответы выше, к сожалению, это было не так просто, как кажется ...
Первый ответ с использованием объекта управления выглядит как правильный способ, но, к сожалению, метод «Формат» не поддерживается в 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();
}
}