2012-11-28 141 views
4

由於堆棧溢出問題Copy files to clipboard in 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") 

我知道我可以遞歸得到所有的文件,然後將它們粘貼到一個接一個。但爲什麼重新發明輪子?這將是很好,如果操作系統可以爲我做...

+0

這聽起來更像是你正在試圖用一個正常的遞歸方法來做一些簡單的事情,這很簡單。 – eandersson

回答

1

剪貼板有一個協議,一個雙方同意的方式來獲取數據從一個進程到另一個。這樣的協議需要有限的方式將合理的數據放在剪貼板上。你可以把任何你想要的東西放在剪貼板上,特別是一個.NET對象。但是,如果另一個粘貼剪貼板數據的應用程序不能理解.NET對象,那麼很有可能它不是用.NET編寫的,那麼它只是想喊出WTF。

所以你使用的方法只是一個小的剪貼板類輔助方法,它使用標準協議將數據放在剪貼板上。另一個應用程序是可能瞭解,但不能保證。該協議是DataFormats.FileDrop。

您的預期替換也可以正常工作,您當然可以在剪貼板上放置一個字符串。你想要複製/粘貼的最基本的東西。但粘貼它的應用程序只會將其識別爲字符串。它不知道該字符串應該是其他意思。該協議是DataFormats.Text。

解決方法非常簡單,只需編寫一個接受字符串的小型私人幫手方法即可。並使用Directory.GetFiles()創建一個放在剪貼板上的StringCollection。簡單,完成任務,吻。