1

基本的にWindowsエクスプローラーモーダルであるC#Windowsベースのアプリケーションを作成しています。ある場所から別の場所にフォルダをコピーして貼り付ける場合。すべてが正常に動作します。ここで私のアプリケーションでは、それぞれツリービューを持つ2つのウィンドウがあります。1つ目は、コピーするファイルの場所を示すツリービューで、2つ目は、ファイルを貼り付けるツリービューです。

次のコードで、すべてが正常に機能します。コピーするすべてのファイルを取得します。これらのファイルはすべてクリップボードにコピーされます。

string[] files = Directory.GetFiles(txtPath.Text.ToString(), "*.*", SearchOption.TopDirectoryOnly);
//also tried using SearchOption.AllDirectories
if (files != null)
{
     IDataObject data = new DataObject(DataFormats.FileDrop, files);
     MemoryStream memo = new MemoryStream(4);
     byte[] bytes = new byte[] { (byte)(copy_cut ? 2 : 5), 0, 0, 0 };
     memo.Write(bytes, 0, bytes.Length);
     data.SetData("Preferred DropEffect", memo);
     Clipboard.SetDataObject(data);
}

そして、次のコードを使用してそれぞれのフォルダに貼り付けられます

IDataObject data = Clipboard.GetDataObject();
if (!data.GetDataPresent(DataFormats.FileDrop))
     return;

     string[] files = (string[])data.GetData(DataFormats.FileDrop);
     MemoryStream stream = (MemoryStream)data.GetData("Preferred DropEffect", true);
     int flag = stream.ReadByte();
     if (flag != 2 && flag != 5)
         return;
     bool cut = (flag == 2);
     foreach (string file in files)
     {
         string dest = "C:" + "\\" + System.IO.Path.GetFileName(file);
         try
         {
             if (cut)
                File.Move(file, dest);
             else
                File.Copy(file, dest, false);
         }
         catch (IOException ex)
         {

         }
      }

すべてがうまくいきます。コピーと貼り付けは良いです。ただし、サブフォルダーがないフォルダーの場合のみ。

たまたま1つのフォルダ内に多くのフォルダがあり、各フォルダに多くのファイルがある場合。その場合、この上記のコードは正しく機能しません。

例えば。

フォルダAにサブフォルダX、Y、Zがあり、各サブフォルダX、Y、Zに多くのファイルがある場合、クリップボードにコピーして目的の場所に貼り付けると、フォルダX、Y、Zのコンテンツ/ファイルのみが取得されます。 X、Y、Zフォルダ自体ではありません。

X、Y、Zフォルダをクリップボードにコピーして貼り付ける方法はありますか?PCで行う単純なコピーアンドペーストと同じように、フォルダー全体とサブフォルダーが目的の場所に貼り付けられます。

この問題に関連するヘルプをいただければ幸いです。

ありがとう、

Vikneshwar

4

1 に答える 1

0

同じ構造をコピーしてそのまま維持する場合は、再帰関数を作成する必要があります。

Msdnにはこの例があり、ここで見つけることができます

于 2012-10-29T09:27:41.737 に答える