• ベストアンサー

フォルダのコピー

こんにちわ。takaoPRと申します。 今、指定したフォルダから指定したフォルダへのコピーをするプログラムを作成しているのですが、思う処理ができずに、困っています。 最初、FileSystemObjectのCopyFolderを使用したところ、読取専用ファイルのコピー時にエラーが出るので、 Win32APIの、「SHFileOperation」を使用しましたが、フォルダの上書きと読取専用ファイルの上書きで確認ダイアログが表示されてしまいます。 実現したい処理は、何のメッセージも出さずに(重複ファイルは勝手に上書きします)フォルダごとコピーをしたいのですが、実現する方法はないのでしょうか? 申し訳ありませんが、みなさまのお知恵をお借りできれば嬉しいです。宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

>せっかくご回答下さったのに申し訳ありませんが、>FOF_NOCONFIRMATIONを指定した場合でも、フォルダの上書きと読み取り専用ファイルの上書き時には確認のダイアログが表示されてしまうようです。 OSはなんでしょう? WinXP Pro SP1で確認したところ、以下のソースでメッセージは出ませんでした。 SHFILEOPSTRUCT stSFO = { 0 }; stSFO.hwnd = hWnd; stSFO.wFunc = FO_COPY; stSFO.pFrom = "c:\\test1\\*.*\0"; stSFO.pTo = "c:\\test2\0"; stSFO.fFlags = FOF_NOCONFIRMATION; int iRet = SHFileOperation(&stSFO);

takaoPR
質問者

お礼

サンプルまで載せて下さってありがとうございます。 無事解決致しました。 原因は、 Public Const FOF_NOCONFIRMATION = &H10& が宣言されてなかったからのようです。 「.Flags = &H10&」 と指定したら上手くいきました。 ありがとうございました。

その他の回答 (5)

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.6

よくみたら#3とかぶったみたい。 OKWeb経由じゃなく、Goo経由で見ているから、気が付かなかった。 失礼したm(_ _)m

takaoPR
質問者

お礼

わざわざのアドバイスありがとうございます。 ご迷惑をお掛けしました。 無事解決致しました。 原因は、 Public Const FOF_NOCONFIRMATION = &H10& が宣言されてなかったからのようです。 &H10& と指定したら上手くいきました。 ありがとうございました。

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.5

>FOF_NOCONFIRMATIONを指定した場合でも・・・ようです。 そう? この方法で、読取専用ファイルに上書きしたことがあるよ 当時の環境 Win2K VB6SP3 CDからHDへのまるまる上書きコピー 結果から言うと、読取専用の上書きコピーをするのといっしょ

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=423672
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3
takaoPR
質問者

お礼

ご回答ありがとうございます。 せっかくご回答下さったのに申し訳ありませんが、FOF_NOCONFIRMATIONを指定した場合でも、フォルダの上書きと読み取り専用ファイルの上書き時には確認のダイアログが表示されてしまうようです。 やはり、予め削除するのが良いのでしょうか・・・。

  • ginyou
  • ベストアンサー率32% (138/431)
回答No.2

APIのファイルコピーではダメなんですか?  フォルダーの中身をすべて列挙して、コピーを行うというやり方です。  これだと、エラーメッセージは、一切出てきませんよ。  私はいつも、これを使っています。

takaoPR
質問者

お礼

ご回答ありがとうございます。 APIのファイルコピーとは、「FileCopy source, destination」のことでしょうか? 確かにこれでしたら、メッセージは一切表示されないのですが、この場合、フォルダは何階層あるかが不明なため、全てのフォルダ内のファイルという記述が分からずに断念してしまいました。 よろしければ、フォルダ内のすべてのファイル、フォルダを調べる事のできるサンプルかなにかありませんでしょうか?勝手ばかり言って本当にもうしわけありません。

回答No.1

わかりませんが、コピー先のファイルをあらかじめ削除もしくは、属性変更しておくというのはいかがでしょうか。

takaoPR
質問者

お礼

ご回答ありがとうございます。 予め削除も考えたのですが、その確認の仕方が非常に複雑になりそうですし、上書きファイル意外は削除できないため、フォルダの削除時に不具合が出そうなので、他の方法を探しています。 もし、何か良い方法があればご教授お願いします。 ありがとうございました。

関連するQ&A