私はFAT16ファイルシステムでSDカードを初期化したいと思います。 私はSDカードリーダーをドライブGに搭載していると仮定しますが、どうすれば簡単にFAT16にフォーマットできますか?FAT16でSDカードをプログラム的にフォーマットするにはどうすればよいですか?
UPDATE: 明確にするために、私はエラーを検出することができ、それはWindows XP以降で動作するような方法でC#を使用して、.NETプラットフォーム上でそれを行うにしたいと思います。
私はFAT16ファイルシステムでSDカードを初期化したいと思います。 私はSDカードリーダーをドライブGに搭載していると仮定しますが、どうすれば簡単にFAT16にフォーマットできますか?FAT16でSDカードをプログラム的にフォーマットするにはどうすればよいですか?
UPDATE: 明確にするために、私はエラーを検出することができ、それはWindows XP以降で動作するような方法でC#を使用して、.NETプラットフォーム上でそれを行うにしたいと思います。
私は管理オブジェクトを使用すると、そうするのが正しい方法のように見えるが、残念ながら「フォーマット」方式ではなく、
に...それはそうと、残念ながら、それは簡単ではありませんでした、上記の最初の答えを回答してみましたWindows XPでサポートされています。
2番目と3番目の回答は機能していますが、ユーザーは操作を確認する必要があります。
ユーザーからの介入なしに、私は2番目のオプションを使用して、プロセスの入力ストリームと出力ストリームをリダイレクトしました。入力ストリームだけをリダイレクトすると、プロセスは失敗しました。
次は一例です。質問は、C#と.NETをタグ付けされていることを考慮すると
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();
}
}
はDriveInfoらで関数を見つけることができませんでしたが、あなたは常に(作成)Format G: /FS:FAT
を含むバッチファイルを使用してSystem.Diagnostics.Process
は、あなたが実際にこれを行う方法を求めていると仮定して、それを開始することができます私はあなたが
の線に沿って何かにフォールバックする必要がありますので、ドライブをフォーマットの枠組みの方法があるとは思わない:C#で(タグから、あなたは疑問に適用しました)
ProcessStartInfo processStartInfo = new ProcessStartInfo();
processStartInfo.FileName = "format";
processStartInfo.Arguments ="/FS:FAT G:";
Process.Start(processStartInfo);
ただし、これはプレットですこれを行うのは脆い方法で、出力を解析せずに、これが成功したかどうかを知ることができないかもしれません。私は全体的に慎重で、あなたのアプリケーション内から実際にフォーマットを許可したいかどうか自問自答します。
pinvoke to call SHFormatDriveを使用できます。
[DllImport("shell32.dll")]
static extern uint SHFormatDrive(IntPtr hwnd, uint drive, uint fmtID, uint options);
public enum SHFormatFlags : uint {
SHFMT_ID_DEFAULT = 0xFFFF,
SHFMT_OPT_FULL = 0x1,
SHFMT_OPT_SYSONLY = 0x2,
SHFMT_ERROR = 0xFFFFFFFF,
SHFMT_CANCEL = 0xFFFFFFFE,
SHFMT_NOFORMAT = 0xFFFFFFD,
}
//(Drive letter : A is 0, Z is 25)
uint result = SHFormatDrive(this.Handle,
6, // formatting C:
(uint)SHFormatFlags.SHFMT_ID_DEFAULT,
0); // full format of g:
if (result == SHFormatFlags.SHFMT_ERROR)
MessageBox.Show("Unable to format the drive");
については、このページの下部をご覧ください。G:を「G:」[0] - 「A」よりも6に変換する安全な方法はありますか? –
SHFMT_ID_DEFAULTがfat16でないことを確認する方法はありますか? –
このメモはMSDNで確認できますか?この機能は、Windows XP Service Pack 2(SP2)およびWindows Server 2003で使用できます。Windowsの後続バージョンで変更または使用できない可能性があります。 –
答えhere
のホストは、WMIメソッドは、C#の例を持っていないようですが、私は周りに狩りを持っていたし、これを構築あり:
ManagementObject disk = new ManagementObject("SELECT * FROM Win32_Volume WHERE Name = 'G:\\\\'");
disk.Get();
disk.InvokeMethod("Format", new object[] {"FAT", false, 4096, "TheLabel", false});
私はドン」これをテストするドライブが余裕があるので、クラスタのサイズが間違っている可能性があります。
詳細については、hereを参照してください。
WMIメソッドを記事の回答にコピーして回答を受け入れることができますか?私は元の投稿が削除された場合は、stackoverflowで答えを持っている方が良いと思います。 –
私は最終的にパラメータでformat.exeを使用するため、記述されているようにFormatメソッドを実行できませんでした。 –
[MSDNライブラリ](http://msdn.microsoft.com/en-us/library/aa394515%28v=VS.85%29.aspx)の次の注記に注意する必要があります。「Windows XPおよびそれ以前:このクラス利用できません。" – lordhog
、私はこれをプログラムで行う必要があるとします。したがって、この質問はスーパーユーザには属しません(これに近い投票がありました)。 – balpha
「スーパーユーザーに属していますか? –
balphaがスーパーユーザーで_not_と言っていました。 SU –