2012-05-30 211 views
-3

使用string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); 得到拖文件到我的应用程序,并将它们复制到不同势位置复制文件到本地文件夹

看来,我的应用程序识别除了那些任何DROP掉的项目IM起源的设备上(摄像机/智能手机等)

如何解决这一点,并得到了掉落的物品的路径,后来与

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

关于调试我可以看到“文件”为空。 再次,这可以完美地从所有其他窗口资源管理器拖动和下降

+0

你可以发布你的代码 – Ravia

+0

张贴,有什么想法吗? –

回答

0

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

拖动的项目可以通过使用获得壳牌标识列表中访问:

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

这些可以用在SHGetPathFromIDList正常文件路径方法的路径被翻译,我不知道,如果这将适用于设备路径。

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

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

+0

嗨那里,谢谢,即时通讯试图通过拖放项目到应用程序,以便它现在是Windows Mobile复制相机/手机中的文件...你有关于如何实现这一功能的想法? –

+0

类似的建议适用。 shell命名空间包含的对象可能是文件系统中的文件,也可能不是文件。您的代码处理对象位于文件系统中的情况,但其他对象需要不同的处理。在我的回答中,除了CeReadFile之外,还应该使用相同的步骤。应该有一个等效的API来获取您支持的设备的文件。在相机的情况下,这可能是Windows Imaging API。不过,这并不是我能提供的帮助。 – tonalq

相关问题