2017-02-20 7 views
3

注:明確にするために、私はごみ箱を空にしたくないので、他の質問に答えてください。私はC#で自分のごみ箱の場所を取得する方法を発見したスタックオーバーフローおよびスーパーユーザーの両方に他の質問から回答を使用してWPFでユーザーのごみ箱にあるすべてのファイル/ディレクトリにアクセスするにはどうすればよいですか?


です:

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

私はどのようにすることができますか?私のリサイクルビンにあるすべてのファイルを正しく取得しますか?私の必要性は、ファイルが最後に使用されたときにアクセスし、場合によってはそれらを復元することです。

ありがとうございました。

答えて

3

ごみ箱には物理的な場所がないため、仮想フォルダであるため、当初想定していたほど単純ではありません。ごみ箱にあるすべてのファイルのリストを取得してこの作業を行うには、%SystemRoot%\ system32 \ shell32.dllにある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: https://stackoverflow.com/a/11660616/

はまた、ごみ箱はあなたが持つことになりますので、各HDDのためにあります注意:あなたがここに私の答えを見ることができるファイルのLastModifiedプロパティを取得するにはhttp://www.dreamincode.net/forums/topic/161500-play-with-recycle-bin-in-code/

すべてのドライブをチェックします。

ここでファイルを復元するには、C#のソリューションがあります。https://stackoverflow.com/a/6025331/495455

+0

うわー、ありがとう。あなたのコードは完璧に動作し、復元するファイルの内容をテストします。私はそれを復元した後、私はそれが今復元された場所を追跡することができると仮定していますか? –

+0

はい*新しい*復元されたファイルパスは 'FolderItem'オブジェクトのプロパティになります。これをデータベースに保存することも、削除されたが検出されていないファイルを追跡するために使用することもできます。ユーザーがごみ箱を空にしたときや、ファイルが存在したという証拠を破壊するためにプログラムを使用したときに何をするかについては、次のリストを参照してください。https://www.howtogeek.com/72130/learn- Windowsでファイルを安全に削除する/ –

+0

私は、前の*のファイルの場所を使用している例では、復元するためにリサイクルされているため、少し苦労しています。私はそれがごみ箱の場所です。 –

関連する問題