-3

string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); ドラッグしたファイルをアプリに取り込み、別の場所にコピーするために使用しています

デバイス(カメラ/スマートフォンなど)から発信されたものを除いて、私のアプリはドロップされたアイテムを認識しているようです

これを解決して、後で使用するためにドロップされたアイテムのパスを取得するにはどうすればよいですか?

FileSystem.CopyDirectory

これが私のコードの短いバージョンです

private void Form1_DragDrop(object sender, DragEventArgs e)
        {
            string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
            FileInfo fileInfo;
                foreach (string file in files)
                {
                   fileInfo=new FileInfo(file);
                   FileSystem.CopyDirectory(fileInfo.FullName, target, UIOption.AllDialogs);
                }
        }

デバッグ時に、「ファイル」がnullであることがわかります。繰り返しますが、これは他のすべてのウィンドウエクスプローラーのドラッグアンドドロップから完全に機能します

4

1 に答える 1

0

デバイスが ActiveSync などを使用する Windows Mobile 6 であると仮定すると、デバイスのファイルはシェルの名前空間に表示されますが、ファイリング システムの一部ではありません。したがって、通常のファイリング システム コピー API を使用してコピーすることはできません。

ドラッグされた項目には、以下を使用してシェル Id リストを取得することでアクセスできます。

e.Data.GetData("Shell IDList Array") as System.IO.MemoryStream

これらは、通常のファイル パスのSHGetPathFromIDListのメソッドを使用してパスに変換できますが、これがデバイス パスで機能するかどうかはわかりません。

最後に、デバイスからファイルを読み取ってコピーするために、CeReadFileおよび関連する関数が必要になります。

これがすべて Windows Mobile デバイスで機能する場合でも、他の種類のデバイスがこのように機能するという保証はありません。これを実装するのはおそらく難しいと思いますが、この情報が役に立つことを願っています。

于 2012-06-12T16:25:36.377 に答える