USB フラッシュ ドライブをフォーマットするための C++ コードをいくつか継承しましたが、フラッシュ ディスクの状態が悪く、その理由 (またはフラッシュ ディスクの状態が悪い原因) がわからない場合は失敗します。
フラッシュ ドライブ (USB フォブ) にパーティションはあるがファイル システムがなく、状態がおかしい場合、WMI フォーマット コードはエラー 11「ドライブにメディアがありません」で失敗しますが、Windows ディスク管理ウィジェットを使用すると、ドライブは正常にフォーマットされます。 . そして、ディスク管理ウィジェットでフォーマットした後、私の WMI コードはそれ以降も適切にフォーマットします。私のコードは、パーティションを削除する前にディスク管理ウィジェットでフォーマットされていたと仮定して、diskpart を使用してパーティションを削除し、パーティションを再作成した後でも、それを正常にフォーマットします。
これは、複数のブランドとサイズの USB フラッシュ ドライブで再現できます。おかしな状態にするために、まずデータをドライブにコピーしてから、diskpart を使用してパーティションを削除して再作成します。その後、ドライブがフォーマットできないおかしな状態になることもあれば、正常にフォーマットできることもあります。常にディスク管理ウィジェットで適切にフォーマットできます。「管理者として」コードを実行しても違いはありません。
ディスク管理ウィジェットの動作の違い、または不足しているものを理解するのを手伝ってくれる人はいますか? うまくいかないのになぜうまくいかないのか途方にくれるので、解決のために次に何を試せばいいのか本当にわかりません。
これが私がコードでやっていることです(C ++):
/* Parameters are set as follows */
pInParInst->FileSystem = exFat
pInParInst->QuickFormat = true
pInParInst->Label = "MyDisk"
IWbemServices::ExecMethod ("\\PC-NAME\ROOT\CIMV2:Win32_Volume.DeviceID="\\\\?\\Volume{f110cf76-ff7b-11e2-8697-005056c00008}\\"",
"Format",
0,
NULL,
pInParInst,
&pOutPar,
NULL);
/* When checking the result: */
pOutPar->Get(L"ReturnValue", 0, &vtRetVal, NULL, 0);
vtRetVal.vt = 3 /* type is int */
vtRetVal.intVal = 11 /* No media in drive */
フォーマットする前のフラッシュ ディスクは、Windows ディスク管理ウィジェットで次のように表示されます。