SHFileOperationを利用して1つのディレクトリを別のディレクトリにコピーする作業コードがあります。この場合、これはPascalコードですが、C++でも同じ関数を使用していますが、この問題は特定のプログラミング言語ではなくWindowsコアに関連しているようです。FOF_NOERRORUIが要求された場合、SHFileOperationを使用したディレクトリ構造のコピーに失敗しました
MSDNによると、私はフラグの以下の組み合わせを指定したい:
FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI
で、私はプログレスバーを必要としない、私は暗黙のことで、ファイルやディレクトリに関するすべての可能な質問を抑える「はい」私はGUI(ダイアログボックス)にエラーメッセージを表示したくありません。
このフラグの組み合わせでは、関数はエラー0x4C7を返します(ユーザーによってキャンセルされますが、これは真ではありません)。 FOF_NOERRORUIを削除すると、同じ入力パラメータとファイルシステム状態で正常に動作します。
残念ながら、エラーメッセージも抑制する必要があり、FOF_NOERRORUIフラグが必要です。
私のニーズを満たすために、このフラグの組み合わせ(およびその他の前提条件)がどのように調整されるべきかを知っていますか?
function CopyDirectory(WindowHandle: HWND; FilenameFrom: string; FilenameTo: string): Boolean;
var
SH: TSHFILEOPSTRUCT;
begin
FillChar(SH, SizeOf(SH), 0);
with SH do
begin
Wnd := WindowHandle;
wFunc := FO_COPY;
pFrom := PChar(FilenameFrom + #0);
pTo := PChar(FilenameTo + #0);
fFlags := FOF_NOCONFIRMMKDIR or FOF_NOCONFIRMATION or FOF_SILENT or FOF_NOERRORUI;
end;
Result := SHFileOperation(SH) = 0;
Result := Result and (not SH.fAnyOperationsAborted);
end;
@traphiでは、問題がシェルAPIにあり、C++で同じコードを使って再現可能であるため、 'Delphi'と' Pascal'タグは適切ではないと思います。 'Delphi'でタグを付けることで、シェルに慣れている人はいなくても、無視するリストに' Delphi'や 'Pascal'を追加して観客を絞り込むことができます。 – Stan