2012-05-30 208 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

相關問題