2013-08-06 2 views
3

C# 코드를 사용하여 휴지통에서 파일 이름 (win7)을 검색하는 기능이 필요합니다. 프레임 워크는이를 달성하기 위해 포함되지 않는 것으로 보입니다.외부 파일을 사용하지 않고 C#으로 recyclebin 파일 이름을 나열하십시오.

Directory.Getfiles()은 작동하지 않습니까?

나는 "windows shell32 automation"을 사용하여 코드를 찾았지만, 이것은 내 응용 프로그램과 재배포해야하는 interop.shell32.dll을 제공해야합니다. 내 응용 프로그램이 독립형으로 작동해야하므로 (사용자 컴퓨터에 Net Framework 2가 오래 있기 때문에)이 솔루션은 이상적이지 않습니다. 이 솔루션은 COM Automation을 사용하고 일부 참조가 실패하거나 Namespace (10) 호출이 실패 할 수 있기 때문에 신뢰할 수없는 것으로 보입니다. 네임 스페이스 (10)가 항상 휴지통에 적합한 폴더인지 확실하지 않습니다. 이 코드는이 문제에 대해 C#에서 발견 한 모든 것입니다.

코드 프로젝트에서 Delphi와 다른 구현을 찾았지만 C# 프로젝트에서이 코드를 복사하면 실제로는 모두 밑줄이 빨간색이므로 컴파일되지 않습니다. C#에서 작동하도록이 코드를 수정하는 방법을 잘 모르겠습니다. pinvoke.net에서 (SHQueryRecycleBin) 사용해야 할 windows 함수에 대한 코드를 찾지 못했지만 휴지통에서 파일 목록을 가져 오는 데 더 많은 함수를 사용해야합니다.

코드 또는 아이디어를 본 사람이 있습니까? 당신이 당신의 응용 프로그램에 대한 참조 C:\Windows\System32\Shell32.dll를 추가하는 경우

+2

음에, 아마 C#을 컴파일하지 것이라고 ... – feralin

+1

맞습니다. C++ 코드는 C# 컴파일러로 컴파일되지 않습니다. C# 컴파일러로만 C#을 컴파일 할 수 있습니다. 따라서 이름 ("C# 컴파일러") ... – feralin

+1

@feedwall Visual Studio와 호환되는 언어가 많기 때문에 Visual Studio와 호환되는 각 언어가 C# 컴파일러를 사용한다는 의미는 아닙니다. 페 랄린이 말한 것처럼 C# 컴파일러로만 C#을 컴파일 할 수 있습니다. – madbrendon

답변

3

당신은 쉽게 Recyle 휴지통에있는 파일의 파일 이름에 액세스 할 수 있습니다

예 : 생성 된 추가 파일 당신을 귀찮게하는 경우

using Shell32; 

    public IEnumerable<string> GetRecycleBinFilenames() 
    { 
     Shell shell = new Shell(); 
     Folder recycleBin = shell.NameSpace(10); 

     foreach (FolderItem2 recfile in recycleBin.Items()) 
     { 
      // Filename 
      yield return recfile.Name; 

      // full recyclepath 
      // yield return recfile.Path; 
     } 

     Marshal.FinalReleaseComObject(shell); 
    } 

당신이 추가 할 수 있습니다 당신이 어떤 델파이 코드를 복사 한 경우는 실행

enter image description here

+1

여분의 파일을 원하지 않는다면'Shell32'의 속성을'Embed Iterop Types'로 설정하십시오. 이것은 어떤 Win7 머신에서도 작동 할 것입니다. –

+1

설정 위치에 그림이 추가되었습니다. 이전 버전의 Windows에서는 이전 버전과 호환 가능해야하지만 ' 지금 당장 시험해 봐. –