2017-02-20 22 views
3

注意:要清楚,我不想清空回收站,回答其他問題。如何訪問WPF中用戶回收站中的所有文件/目錄?


使用來自兩個堆棧溢出和超級用戶等問題的答案,我已經發現的方式來獲得在C#一個人的回收站中的位置是:

@"C:\$Recycle.Bin\" + System.Security.Principal.WindowsIdentity.GetCurrent().User.ToString()

然而,當我運行下面的代碼我得到不同的文件,實際上是在我的回收站中:

string location = @"C:\$Recycle.Bin\" + System.Security.Principal.WindowsIdentity.GetCurrent().User.ToString(); 
foreach (string file in Directory.GetFiles(location)) 
{ 
    Console.Writeline(file); 
}     

我該如何c正確地獲取我的回收站中的所有文件?我的需求是在上次使用文件時訪問,並且可能還原它們。

謝謝。

回答

3

這不像最初想象的那麼簡單,因爲回收站沒有物理位置,它是一個虛擬文件夾。要獲取回收站中所有文件的列表並使其工作,您需要添加對shell32.dll的引用(位於%SystemRoot%\ system32 \ shell32.dll中)。

public static void Main(string[] args) 
{ 
    Shell shell = new Shell(); 
    Folder folder = shell.NameSpace(0x000a); 

    foreach (FolderItem2 item in folder.Items()) 
     Console.WriteLine("FileName:{0}", item.Name); 

    Marshal.FinalReleaseComObject(shell); 
    Console.ReadLine(); 
} 

REF:http://www.dreamincode.net/forums/topic/161500-play-with-recycle-bin-in-code/

要獲得這些文件的LastModified屬性你可以看到我的答案在這裏: https://stackoverflow.com/a/11660616/

還要注意有一個回收站爲每個硬盤驅動器,所以你將有檢查所有驅動器。

要在這裏恢復文件是C#中的解決方案:https://stackoverflow.com/a/6025331/495455

+0

哇,謝謝。你的代碼完美工作,現在我將測試恢復文件的東西。我假設我恢復後,我可以跟蹤它現在恢復的位置? –

+0

是它的* new *恢復的文件路徑將是'FolderItem'對象上的一個屬性。您可以將其保存到數據庫或任何記錄已刪除但您檢測不到的文件。只是一個FYI不知道當你的用戶清空回收站,或者如果他們使用一個程序來銷燬文件曾經存在的證據,你打算做什麼,這裏是一個列表:https://www.howtogeek.com/72130/learn-如何安全刪除文件在Windows/ –

+0

我在微微掙扎,因爲在這個例子中,他們使用*之前的文件位置*它被回收來恢復它。我只有在回收站中的位置 –

相關問題