-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);
                }
        }

在调试时我可以看到“文件”为空。再次,这在所有其他窗口资源管理器拖放中都可以完美运行

4

1 回答 1

0

假设您的设备是使用 ActiveSync 或类似设备的 Windows Mobile 6,则设备的文件出现在 shell 命名空间中,但它们不是文件系统的一部分。因此,它们无法使用正常的归档系统复制 API 进行复制。

可以通过使用以下方式获取 Shell Id 列表来访问拖动的项目:

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

这些可以使用SHGetPathFromIDList中的方法转换为普通文件路径的路径,我不确定这是否适用于设备路径。

最后,需要CeReadFile和相关函数从设备中读取文件以便复制它。

即使这一切都适用于 Windows Mobile 设备,也不能保证其他类型的设备也能以这种方式工作。恐怕这可能难以实施,我希望这些信息对您有所帮助。

于 2012-06-12T16:25:36.377 回答