3

私はこれを数時間正しくすることに取り組んでおり、WindowsVistaとWindows7で完全に機能しますが、Windows XPで実行すると、メッセージなしで失敗します。残念ながら、私はXPでの開発環境を持っていないので、デバッガーを介してそれを実行してチェックすることはできません。同じコードが実際にCopyFileデータを書き出すためにといくつかのコマンドを使用してC:\いるので、それがパーミッションエラーである場合、それは奇妙なものです。

編集:戻り値は1223で、ERROR_CANCELLEDこれはユーザーによってキャンセルされたことを意味します。

編集2:s.fFlagsを無効にすると、すぐにダイアログボックスが表示され、dir-testフォルダを作成するかどうかを尋ねられたので、に切り替えてFOF_NOCONFIRMATION、フラグを無視しているように見えました。同じ方法で削除するときにも使用するSHFileOperationので、ファイルのコピーには適用されません。

LPTSTR source = L"dir-test\\*\0";               
LPTSTR dest = L"C:\\dir-test\0";


SHFILEOPSTRUCT s = { 0 };
s.hwnd = 0;
s.wFunc = FO_COPY;
s.fFlags = FOF_SILENT;
s.pTo = dest;
s.pFrom = source;
int n;
n = SHFileOperation(&s);`
4

2 に答える 2

1

したがって、いくつかの奇妙な理由で、を使用するSHFileOperationとWindows XP(Vistaまたは7ではない)の確認ダイアログが強制され、フラグを無視して確認するように指示することがわかります。CreateDirectory()確認ダイアログを必要としない、コピーを実行する前に使用する簡単な修正。

于 2013-03-06T16:37:11.617 に答える
0

のドキュメントにSHFILEOPSTRUCTは次の警告があります。

パスは常にフルパスである必要があることを誇張することはできません。pFromまたはpToメンバーが修飾されていない名前の場合、現在のディレクトリは、GetCurrentDirectoryおよびSetCurrentDirectory関数によって管理されるグローバルな現在のドライブおよびディレクトリ設定から取得されます。

あなたのsource仕様は修飾されていない名前です。

于 2013-03-06T15:57:25.850 に答える