6

Stack Overflowの質問のおかげで、C#でファイルをクリップボードにコピーしました。Clipboard.SetFileDropListを使用して、次のようになりました。

using System;
using System.Collections.Specialized;
using System.Windows.Forms;

class Program
{
    [STAThread]
    static void Main ( string[] args)
    {    
        StringCollection paths = new StringCollection();
        paths.Add( @"C:\Users\Antonio\Desktop\MyDirectory" );
        Clipboard.SetFileDropList( paths);
    }
}

そうすれば、ディレクトリ全体をクリップボードに配置して、必要な場所に貼り付けることができます。ただし、コードを貼り付けられるようにしたいと思います。貼り付けたい場所に行きたくないので、Ctrl+を押しVます。言い換えれば、私は次のようなものを探しています:

Clipboard.Paste("C:\Users\LocationWhereIWantToPasteTheFolder")

すべてのファイルを再帰的に取得して、1つずつ貼り付けることができることはわかっています。しかし、なぜ車輪の再発明をするのでしょうか。OSが私のためにそれをすることができればそれは素晴らしいでしょう...

4

1 に答える 1

1

クリップボードには、あるプロセスから別のプロセスにデータを取得するための相互に合意された方法であるプロトコルがあります。このようなプロトコルでは、クリップボードに適切なデータを配置する方法を制限する必要があります。クリップボードには、特に.NETオブジェクトなど、好きなものを置くことができます。ただし、クリップボードのデータを貼り付ける他のアプリが.NETオブジェクトを理解しない場合、おそらく.NETで記述されていない場合は、WTFを要求するだけです。

したがって、使用しているメソッドは、標準プロトコルを使用してクリップボードにデータを配置する小さなクリップボードクラスヘルパーメソッドです。別のアプリが理解する可能性が高いものですが、保証はありません。プロトコルはDataFormats.FileDropです。

あなたの意図した交換もうまくいくでしょう、あなたは確かにクリップボードにひもを置くことができます。コピー/貼り付けしたい最も基本的なもの。ただし、貼り付けるアプリは、文字列としてのみ認識します。文字列が他の何かを意味することになっているという手がかりはありません。プロトコルはDataFormats.Textです。

解決策は非常に単純で、文字列を受け取る小さなプライベートヘルパーメソッドを作成するだけです。そして、Directory.GetFiles()を使用して、クリップボードに配置するStringCollectionを作成します。シンプルで、ミッションを達成し、キスします。

于 2012-11-29T00:45:33.877 に答える