DOBON.NET DOBON.NETプログラミング掲示板過去ログ

フォルダ階層を保ったままクリップボードへコピー

環境/言語:[VS2012、Windos7]
分類:[.NET]

下記ページでファイルやフォルダをクリップボードへコピーする方法を教えていただきました。
http://dobon.net/vb/dotnet/file/copyfiletoclipboard.html

しかし、たとえばフォルダ内にさらにサブフォルダやファイルがある状態で、エクスプローラーでは[Ctrl]+[C]を押して別のフォルダで[Ctrl]+[V]を押すと、フォルダの中身も併せて貼り付けできるのに対して、上記の方法では階層が保たれずに、同じ階層にすべてのフォルダとファイルを貼り付けてしまいます。

フォルダの階層をたもったままコピーするにはどうしたらよいのでしょうか?

貼り付けは、[Ctrl]+[V]を使うことが条件です。

つまり、エクスプローラーで[Ctrl]+[C]を押下したときとまったく同じ状態にクリップボードの状態をするにはどうしたらよいでしょうか?
2013/11/25(Mon) 09:42:20 編集(投稿者)

■No31935に返信(だいゆうさくさんの記事)
> 環境/言語:[VS2012、Windos7] 
> 分類:[.NET]
Windos7 は Windows7 のことだとして、回答としては 
VB2012 でも C#2012 でも良いのですね。

ちなみに、Windows 2000 当時は「フォルダ」表記でしたが、
現在(Windows 7も含む)は「フォルダー」が正しい表記です。


> エクスプローラーでは
ちなみにこれも、現在でこそ「エクスプローラー」表記ですが、
以前は「エクスプローラ」表記でしたね(どうでも良い話ですが)。


> 上記の方法では階層が保たれずに、
こちらでは現象を再現できませんでした。階層は期待通りに保たれています。

たとえば、ファイルシステム上に
 C:\folder1\
 C:\folder1\file1-1.txt
 C:\folder1\file1-2.txt
 C:\folder1\folder2\
 C:\folder1\folder2\file2-1.bmp
 C:\folder1\folder2\file2-2.bmp
があったとします。

それに対して、
 [C:\folder1\]をエクスプローラーからコピーする
と、貼り付け時には folder1 およびその下の階層がそっくりコピーされます。

これと同じ状態を用意するという話であれば、たとえば C# ならば
 Clipboard.SetFileDropList(new StringCollection() { @"C:\folder1\" });
で指定できるはずです。
だいゆうさくさんの環境では、これが期待動作しないということでしょうか。


また、C:\folder1\ 内に対して、folder2 と file1-2.txt のみをコピーした状態、すなわち、
 [C:\folder1\file1-2.txt]
 [C:\folder1\folder2\]
がコピーされた状態であれば、たとえば VB であれば
 Clipboard.SetFileDropList(New StringCollection() From {"C:\folder1\file1-2.txt", "C:\folder1\folder2\"})
となりますが、当方ではこれも期待動作しており、貼り付け先には
 .\file1-2.txt
 .\folder2\
 .\folder2\file2-1.bmp
 .\folder2\file2-2.bmp
という構造がそのまま展開されていました。

DOBON.NET | プログラミング道 | プログラミング掲示板