C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[13]: C#で複数のファイルをコピーする


(過去ログ 34 を表示中)

[トピック内 21 記事 (1 - 20 表示)]  << 0 | 1 >>

■16894 / inTopicNo.1)  C#で複数のファイルをコピーする
  
□投稿者/ のびた (1回)-(2008/04/12(Sat) 16:52:32)

分類:[C#] 

こんにちは。
最近日曜プログラマをはじめました。
VisualStudioExpress2008のC#のファイルコピーについての質問です。

複数のファイルをコピーする際に
for (int i = 0; i < copySrcPath.Length; i++){
    FileSystem.CopyFile(copySrcPath[i], copyDestPath, UIOption.AllDialogs);
}

としています。これだと、同じファイル名が存在する場合には上書き確認が何度も
表示されてしまいます。
そこで、上書き確認を一度表示させて、後は同じ処理をするような方法はありませんでしょうか?

つまり、エクスプローラで複数のファイルをコピーした場合のように、
上書き確認で「すべて上書き」(XP)や「同じ処理をする」(Vista)などの確認ダイアログを
表示させたいのですが・・・。

引用返信 編集キー/
■16895 / inTopicNo.2)  Re[1]: C#で複数のファイルをコピーする
□投稿者/ はつね (592回)-(2008/04/12(Sat) 17:18:51)
No16894 (のびた さん) に返信
> つまり、エクスプローラで複数のファイルをコピーした場合のように、
> 上書き確認で「すべて上書き」(XP)や「同じ処理をする」(Vista)などの確認ダイアログを
> 表示させたいのですが・・・。

同名ファイルがあるかをループの中でチェックし、あったときには、
そのダイアログを表示し、その応答に応じてコピーの動作を変化させる。

引用返信 編集キー/
■16896 / inTopicNo.3)  Re[2]: C#で複数のファイルをコピーする
□投稿者/ のびた (3回)-(2008/04/12(Sat) 17:40:30)
2008/04/12(Sat) 17:42:39 編集(投稿者)

No16895 (はつね さん) に返信
> ■No16894 (のびた さん) に返信
>>つまり、エクスプローラで複数のファイルをコピーした場合のように、
>>上書き確認で「すべて上書き」(XP)や「同じ処理をする」(Vista)などの確認ダイアログを
>>表示させたいのですが・・・。
>
> 同名ファイルがあるかをループの中でチェックし、あったときには、
> そのダイアログを表示し、その応答に応じてコピーの動作を変化させる。
>

早速の回答ありがとうございます。
最初は、はつねさんのおっしゃる通りにしたのですが
これだと、1つ1つのファイルコピーの進捗度合いが表示されますが、
全体の進捗度合がわかりませんよね?
(しかも、FileSystem.CopyFile()だと
上書き確認で「すべて上書き」(XP)や「同じ処理をする」(Vista)などの確認ダイアログが表示されません・・・。)
あくまで、エクスプローラのような全体の進捗が表示されつつ、
上書き確認をするような関数・クラスは無いものかと探しています。
というか、エクスプローラのファイルコピーの機能は使えないのかな?と・・・。

引用返信 編集キー/
■16898 / inTopicNo.4)  Re[3]: C#で複数のファイルをコピーする
□投稿者/ はつね (593回)-(2008/04/12(Sat) 18:11:35)
No16896 (のびた さん) に返信
> というか、エクスプローラのファイルコピーの機能は使えないのかな?と・・・。

一応、↓こんなのはあります。
http://msdn2.microsoft.com/ja-jp/magazine/cc163304.aspx
引用返信 編集キー/
■16899 / inTopicNo.5)  Re[3]: C#で複数のファイルをコピーする
□投稿者/ 渋木宏明(ひどり) (701回)-(2008/04/12(Sat) 18:14:25)
渋木宏明(ひどり) さんの Web サイト
> というか、エクスプローラのファイルコピーの機能は使えないのかな?と・・・。

SHFleOperation() API でどーぞ。
引用返信 編集キー/
■16902 / inTopicNo.6)  Re[4]: C#で複数のファイルをコピーする
□投稿者/ のびた (4回)-(2008/04/12(Sat) 19:09:12)
No16898 (はつね さん) に返信
> ■No16896 (のびた さん) に返信
>>というか、エクスプローラのファイルコピーの機能は使えないのかな?と・・・。
>
> 一応、↓こんなのはあります。
> http://msdn2.microsoft.com/ja-jp/magazine/cc163304.aspx

ありがとうございます。
現在のレベルでは何が何だかわからないのですが、がんばって勉強してみます。
引用返信 編集キー/
■16903 / inTopicNo.7)  Re[4]: C#で複数のファイルをコピーする
□投稿者/ のびた (5回)-(2008/04/12(Sat) 19:13:41)
No16899 (渋木宏明(ひどり) さん) に返信
>>というか、エクスプローラのファイルコピーの機能は使えないのかな?と・・・。
>
> SHFleOperation() API でどーぞ。

SHFlieOperationってどうやって使うんでしょうか・・・?
VisualStudioの参照設定でShell32.dllを参照してみたり、
using System.Runtime.InteropServices;としてみたりしても
発見できない関数なので。。。(T T)
あまりに間抜けな質問ですみません。
引用返信 編集キー/
■16904 / inTopicNo.8)  Re[5]: C#で複数のファイルをコピーする
□投稿者/ 渋木宏明(ひどり) (702回)-(2008/04/12(Sat) 19:46:47)
渋木宏明(ひどり) さんの Web サイト
> SHFlieOperationってどうやって使うんでしょうか・・・?

API なので、DllImport で使ってください。

宣言例は

http://www.pinvoke.net/

に登録されているはずです。

引用返信 編集キー/
■16906 / inTopicNo.9)  Re[5]: C#で複数のファイルをコピーする
□投稿者/ 倉田 有大 (192回)-(2008/04/12(Sat) 22:55:00)
No16903 (のびた さん) に返信
> ■No16899 (渋木宏明(ひどり) さん) に返信
> >>というか、エクスプローラのファイルコピーの機能は使えないのかな?と・・・。
>>
>>SHFleOperation() API でどーぞ。
>
> SHFlieOperationってどうやって使うんでしょうか・・・?
> VisualStudioの参照設定でShell32.dllを参照してみたり、
> using System.Runtime.InteropServices;としてみたりしても
> 発見できない関数なので。。。(T T)
> あまりに間抜けな質問ですみません

サンプルぐぐってでてきません?
私のもっている本にはのってます。
結構簡単です。
というかiFileOperationなんてあったのね。
引用返信 編集キー/
■16908 / inTopicNo.10)  Re[6]: C#で複数のファイルをコピーする
□投稿者/ Azulean (65回)-(2008/04/12(Sat) 23:54:13)
> というかiFileOperationなんてあったのね。
IFileOperationはVistaからなので、職業PGはしばらく手を出さない代物かもしれません。
引用返信 編集キー/
■16911 / inTopicNo.11)  Re[7]: C#で複数のファイルをコピーする
□投稿者/ 倉田 有大 (193回)-(2008/04/13(Sun) 00:39:40)
No16908 (Azulean さん) に返信
>>というかiFileOperationなんてあったのね。
> IFileOperationはVistaからなので、職業PGはしばらく手を出さない代物かもしれません。

なんか、便利そうに見えるんですけどね。私もXPなのでためせませんw

ところでのびたさん。
SHFileOperation C#
二つのキーワードでぐぐったら、サンプルでてきましたよ。
http://uchukamen.com/Programming1/ToRecycleBin/
削除だけなら宇宙仮面さんのところ↑
http://moeblog.or.tp/cs/API_File_SHFileOperation.shtml
とか、検索にひっかかりすぎて、どれを紹介したらいいか困るほどです。
引用返信 編集キー/
■16912 / inTopicNo.12)  Re[7]: C#で複数のファイルをコピーする
□投稿者/ はつね (594回)-(2008/04/13(Sun) 00:58:56)
No16908 (Azulean さん) に返信
>>というかiFileOperationなんてあったのね。
> IFileOperationはVistaからなので、職業PGはしばらく手を出さない代物かもしれません。

でも、元質問者の方ってVistaの動きをさせたいって書いてなかったでしたっけ?

# SHFileOperationを使ってVistaで動かした時にどう動くのかは未確認ですが。

引用返信 編集キー/
■16913 / inTopicNo.13)  Re[8]: C#で複数のファイルをコピーする
□投稿者/ ちゃっぴ (99回)-(2008/04/13(Sun) 09:36:25)
ちゃっぴ さんの Web サイト
No16912 (はつね さん) に返信
今回はこの方法をとらないようですけど、念のため

> 同名ファイルがあるかをループの中でチェックし、あったときには、
> そのダイアログを表示し、その応答に応じてコピーの動作を変化させる。

File I/O に関する操作は実際にやってみてどうだったか?で判断するのが基本です。
事前確認を信用してはいけません。
引用返信 編集キー/
■16914 / inTopicNo.14)  Re[8]: C#で複数のファイルをコピーする
□投稿者/ Azulean (66回)-(2008/04/13(Sun) 10:54:26)
>>IFileOperationはVistaからなので、職業PGはしばらく手を出さない代物かもしれません。
> でも、元質問者の方ってVistaの動きをさせたいって書いてなかったでしたっけ?
XPでも動かしたいように読み取りました。
XPで動かすのであれば、IFileOperationのみではまずいので。

> # SHFileOperationを使ってVistaで動かした時にどう動くのかは未確認ですが。
まさにここですね。
Vistaで挙動がおかしい、変だということになれば、OSのバージョンによって挙動を変える実装にしなければなりません。
#ただ、互換性の問題から、大きく変えているとは考えにくいのですが…。
引用返信 編集キー/
■16915 / inTopicNo.15)  Re[9]: C#で複数のファイルをコピーする
□投稿者/ のびた (6回)-(2008/04/13(Sun) 10:56:01)
みなさん、ありがとうございました。
無事目的の処理をすることができました!

>ところでのびたさん。
>SHFileOperation C#
>二つのキーワードでぐぐったら、サンプルでてきましたよ。
>http://uchukamen.com/Programming1/ToRecycleBin/
>削除だけなら宇宙仮面さんのところ↑
>http://moeblog.or.tp/cs/API_File_SHFileOperation.shtml
>とか、検索にひっかかりすぎて、どれを紹介したらいいか困るほどです。

SHFileOperation C#のキーワードで検索するまで至りませんでした・・・。
検索の仕方から勉強しなおします。

みなさんの手を煩わせてしまって申し訳ありませんでしたm(_ _)m
ありがとうございました!!
解決済み
引用返信 編集キー/
■16916 / inTopicNo.16)  Re[9]: C#で複数のファイルをコピーする
□投稿者/ のびた (7回)-(2008/04/13(Sun) 10:59:42)
No16914 (Azulean さん) に返信
> >>IFileOperationはVistaからなので、職業PGはしばらく手を出さない代物かもしれません。
>>でも、元質問者の方ってVistaの動きをさせたいって書いてなかったでしたっけ?
> XPでも動かしたいように読み取りました。
> XPで動かすのであれば、IFileOperationのみではまずいので。
>
>># SHFileOperationを使ってVistaで動かした時にどう動くのかは未確認ですが。
> まさにここですね。
> Vistaで挙動がおかしい、変だということになれば、OSのバージョンによって挙動を変える実装にしなければなりません。
> #ただ、互換性の問題から、大きく変えているとは考えにくいのですが…。

できればXPでも同じ処理をしたいのですが、とりあえずはVistaのみで動かします。
ありがとうございました。

解決済み
引用返信 編集キー/
■16934 / inTopicNo.17)  Re[9]: C#で複数のファイルをコピーする
□投稿者/ 渋木宏明(ひどり) (703回)-(2008/04/14(Mon) 02:57:01)
渋木宏明(ひどり) さんの Web サイト
> Vistaで挙動がおかしい、変だということになれば、OSのバージョンによって挙動を変える実装にしなければなりません。

挙動がおかしい、はまぁ無いでしょう。
最悪でも絵ヅラが古くさい(=XP相当)程度のはずです。(確認してないけど、たぶんそれも無いはず)

>> そのダイアログを表示し、その応答に応じてコピーの動作を変化させる。
>
>>File I/O に関する操作は実際にやってみてどうだったか?で判断するのが基本です。
>>事前確認を信用してはいけません。

この場合は事前に確認するしかないすよね。
コピー先の既存ファイルを書きつぶしてしまってから、「あ、やっぱファイルあったんだ」では遅すぎるわけで。

そういう意味では、「コピーの動作を変化させる」じゃなくて「上書きコピーするかしないかをユーザに確認する」とした方がよかったんでしょうね。

引用返信 編集キー/
■16935 / inTopicNo.18)  Re[10]: C#で複数のファイルをコピーする
□投稿者/ 倉田 有大 (195回)-(2008/04/14(Mon) 04:04:01)
> この場合は事前に確認するしかないすよね。
> コピー先の既存ファイルを書きつぶしてしまってから、「あ、やっぱファイルあったんだ」では遅すぎるわけで。
>
> そういう意味では、「コピーの動作を変化させる」じゃなくて「上書きコピーするかしないかをユーザに確認する」とした方がよかったんでしょうね。

.Netがゴミ箱サポートする日はくるんでしょうかね?多分無理かな。
アンドゥ、リドゥぐらいは.Netに組み込んで欲しいなあ。
引用返信 編集キー/
■16937 / inTopicNo.19)  Re[11]: C#で複数のファイルをコピーする
□投稿者/ Azulean (67回)-(2008/04/14(Mon) 07:28:18)
2008/04/14(Mon) 07:46:06 編集(投稿者)

> .Netがゴミ箱サポートする日はくるんでしょうかね?多分無理かな。
ゴミ箱への移動はSHFileOperationでカバーされていますが、ゴミ箱からの復元等はIContextMenuでしか提供されていないはずです。
IShellFolder系の思想としては仕方ないのかもしれませんが、標準サポートは望み薄かなぁという気もします。

> アンドゥ、リドゥぐらいは.Netに組み込んで欲しいなあ。
エクスプローラは独自の実装になっているんじゃないかな?
Shell系のインターフェースで見覚えがないので。
#組み込むにしてもどの程度の操作をどの程度記憶しておくとか、Undoできるフォルダ、ファイルが残っているのかとかややこしい。
引用返信 編集キー/
■16945 / inTopicNo.20)  Re[12]: C#で複数のファイルをコピーする
 
□投稿者/ ちゃっぴ (100回)-(2008/04/14(Mon) 10:28:25)
ちゃっぴ さんの Web サイト
> この場合は事前に確認するしかないすよね。
> コピー先の既存ファイルを書きつぶしてしまってから、「あ、やっぱファイルあったんだ」では遅すぎるわけで。

上書きしない flag ありますよね?
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -