エクスプローラでドライブを選択し、右クリックメニューからフォーマットを選択するとダイアログが出力され、ドライブのフォーマットを行うことができます。
ここでは、C# からこのフォーマットダイアログを出力するサンプルコードを掲載しています。なお、具体的には SHFormatDrive 関数を使用しています。
スポンサーリンク
フォーマットダイアログを出力する
具体的にフォーマットダイアログを出力するサンプルコードは次の通りです。詳細はコメントを参照ください。
参考
//using System.Runtime.InteropServices;
// フォーマットダイアログ出力関数定義
[DllImport("shell32.dll")]
private static extern uint SHFormatDrive(IntPtr hwnd, int drive, int formatID, int options);
// フォーマットID(formatID)の定義
private const int SHFMT_ID_DEFAULT = 0xFFFF;
// フォーマットダイアログ出力関数のリターン値
private const uint SHFMT_ERROR = 0xFFFFFFFF; // 最終フォーマットでエラー
private const uint SHFMT_CANCEL = 0xFFFFFFFE; // 最終フォーマットでキャンセル
private const uint SHFMT_NOFORMAT = 0xFFFFFFFD; // フォーマットできなかった
private const int SHFMT_OPT_ZERO = 0x0000; // 通常フォーマット
private const int SHFMT_OPT_FULL = 0x0001; // クイックフォーマット
private void button1_Click(object sender, EventArgs e)
{
// フォーマットするドライブ
string driveLetter = "K:";
// A ~ Z ドライブ(インデックス:0 ~ 25)定義
string[] driveLetters = {
"A:","B:", "C:", "D:", "E:", "F:", "G:", "H:", "I:", "J:", "K:", "L:", "M:",
"N:","O:", "P:", "Q:", "R:", "S:", "T:", "U:", "V:", "W:", "X:", "Y:", "Z:",
};
// ドライブレターが配列内の要素と一致するインデックスを取得する
int index = Array.IndexOf(driveLetters, driveLetter);
if (index < 0)
{
MessageBox.Show("ドライブレターがおかしい。ワッハッハー");
return;
}
/*
* パラメータ設定
*/
// SHFormatDrive のパラメータ(drive)は A ~ Zドライブ が 0 ~ 25 に対応する
int drive = index; // フォーマットドライブインデックス
int options = SHFMT_OPT_FULL; // クイックフォーマット
// フォーマットダイアログを出力する
uint result = SHFormatDrive(this.Handle, drive, SHFMT_ID_DEFAULT, options);
if ((result == SHFMT_ERROR) || (result == SHFMT_CANCEL) || (result == SHFMT_NOFORMAT))
{
Console.WriteLine("エラーとかキャンセルとか");
}
else
{
Console.WriteLine("最終フォーマットはOK牧場");
}
}
フォーマットダイアログを出力せずともドライブのフォーマットを行うこともできますが、個人的には、本ページで掲載したフォーマットダイアログを出力する方法が最も最適と考えています。
がしかし、フォーマットのダイアログを出力されたくない方は、次のリンクも御確認ください。