SHFileOperationを利用してWindowsディレクトリにファイルをコピーするには?


どら  2004-12-29 19:39:54  No: 55860

しつこくすみません(^^;
この前の質問の続きになるのかもしれませんが・・・
SHFileOperationで、ファイルなどのコピーをするときに、コピー先をWindowsディレクトリ(C:\WINNT、C:\WINDOWS)のしたにコピーしたいと考えています。
Windowsディレクトリを取得し、そこにファイルをコピーしようとしたのですが・・・「ディスクが一杯でないか、書き込み禁止になっていないか、またはファイルが使用中でないかを確認してください」というエラーが出てコピーできません。

ちなみに、ログインしているアカウントは、Local Administratorsのグループに所属しています。
試しに、ファイルを直接ドラッグ&ドロップしたときは、あっさりとコピーできました(XCOPYコマンドもできました)。

ライブラリなども見てみましたが、それらしきフラグなども見つからず・・・

何か原因が思い当たる方いらっしゃいませんか?
よろしくお願いします・・・。

ちなみに
    char command[64];
    char From[] = "コピー元のファイル"
    char To[64];
    GetWindowsDirectory(To, sizeof(To);

    sprintf(command, "xcopy %s %%windir%%", From);
    system(command);
とするとうまくいくのですが・・・

    char From[64], To[64];
    GetWindowsDirectory(To, sizeof(To));

    CopyFile(From, To, FALSE);

とやるか、SHFILEOPSTRUCT 構造体のm_From, m_Toに格納してSHFileOperationを行おうとすると、「ディスクが一杯でないか、・・・」が出ます。


ころ  2005-01-05 20:14:11  No: 55861

予想ですが
CopyFile(From, To, FALSE);
はファイルのコピーでは?
(C:\)にWindowsというファイルを作ろうとしているような気が
します。

またSHFileOperationの方も確認はしていませんが
× "C:\\Windows"
○ "C:\\Windows\\"
にしないとだめではないでしょうか?(自信なし)

#デバッグで停止してみて、コピー元とコピー先の変数の値を書き込んで
#みると詳しい方が適切な指摘をしてくれるかもしれません


どら  2005-01-05 20:38:11  No: 55862

ころさん

レスありがとうございます。

>またSHFileOperationの方も確認はしていませんが
>× "C:\\Windows"
>○ "C:\\Windows\\"
>にしないとだめではないでしょうか?(自信なし)

確かそうだと思います。
私はiniファイルでこれらの内容を設定しています。
別のドライブの別フォルダにファイルを保存することはできているんです。
Windowsフォルダにコピーしようとすると、先述したエラーが・・・

なので、記述の問題ではないと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加