2009-08-05 4 views
3

私はFAT16ファイルシステムでSDカードを初期化したいと思います。 私はSDカードリーダーをドライブGに搭載していると仮定しますが、どうすれば簡単にFAT16にフォーマットできますか?FAT16でSDカードをプログラム的にフォーマットするにはどうすればよいですか?

UPDATE: 明確にするために、私はエラーを検出することができ、それはWindows XP以降で動作するような方法でC#を使用して、.NETプラットフォーム上でそれを行うにしたいと思います。

+0

、私はこれをプログラムで行う必要があるとします。したがって、この質問はスーパーユーザには属しません(これに近い投票がありました)。 – balpha

+2

「スーパーユーザーに属していますか? –

+0

balphaがスーパーユーザーで_not_と言っていました。 SU –

答えて

3

私は管理オブジェクトを使用すると、そうするのが正しい方法のように見えるが、残念ながら「フォーマット」方式ではなく、

に...それはそうと、残念ながら、それは簡単ではありませんでした、上記の最初の答えを回答してみました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(); 

    } 
} 
+2

"format"を "format.com"に変更するか、ファイルが存在しないと報告します。 (Windows XP SP3) – jhlllnd

+0

@jhlllnd Windows 7でも同じことをしなければならなかった。ありがとう。 – Lander

1

はDriveInfoらで関数を見つけることができませんでしたが、あなたは常に(作成)Format G: /FS:FATを含むバッチファイルを使用してSystem.Diagnostics.Process

1

は、あなたが実際にこれを行う方法を求めていると仮定して、それを開始することができます私はあなたが

の線に沿って何かにフォールバックする必要がありますので、ドライブをフォーマットの枠組みの方法があるとは思わない

:C#で(タグから、あなたは疑問に適用しました)

ProcessStartInfo processStartInfo = new ProcessStartInfo(); 
processStartInfo.FileName = "format"; 
processStartInfo.Arguments ="/FS:FAT G:"; 
Process.Start(processStartInfo); 

ただし、これはプレットですこれを行うのは脆い方法で、出力を解析せずに、これが成功したかどうかを知ることができないかもしれません。私は全体的に慎重で、あなたのアプリケーション内から実際にフォーマットを許可したいかどうか自問自答します。

3

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"); 
+0

については、このページの下部をご覧ください。G:を「G:」[0] - 「A」よりも6に変換する安全な方法はありますか? –

+0

SHFMT_ID_DEFAULTがfat16でないことを確認する方法はありますか? –

+0

このメモはMSDNで確認できますか?この機能は、Windows XP Service Pack 2(SP2)およびWindows Server 2003で使用できます。Windowsの後続バージョンで変更または使用できない可能性があります。 –

1

答え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を参照してください。

+0

WMIメソッドを記事の回答にコピーして回答を受け入れることができますか?私は元の投稿が削除された場合は、stackoverflowで答えを持っている方が良いと思います。 –

+0

私は最終的にパラメータでformat.exeを使用するため、記述されているようにFormatメソッドを実行できませんでした。 –

+0

[MSDNライブラリ](http://msdn.microsoft.com/en-us/library/aa394515%28v=VS.85%29.aspx)の次の注記に注意する必要があります。「Windows XPおよびそれ以前:このクラス利用できません。" – lordhog

関連する問題