문제
사용자가 특정 기준에 대해 NTFS의 디렉토리를 검색하고 결과를 표시 할 수있는 웹 페이지를 작성하고 싶습니다.
디렉토리를 인덱싱해야합니까?
디렉토리를 쿼리하는 데 사용할 수있는 .NET 액세스 가능한 Windows 검색 API가 있습니까?
해결책
System.io.directoryInfo만으로도 검색을 내장하지 않았습니다.
대부분의 사람들은 각 directoryInfo에서 getDirectories 및 getfiles를 호출하는 재귀 방법을 작성하게됩니다.
다른 팁
이것 이름 (와일드 카드), 크기, 타임 스탬프 및 속성을 기반으로 파일 선택을하는 파일 선택자라는 재사용 가능한 클래스입니다.
사용법은 다음과 같습니다.
Ionic.FileSelector ff = new Ionic.FileSelector(selectionCriteria);
var filesToAdd = ff.SelectFiles(directoryOnDisk, recurseDirectories);
선택 - 기준은 다음과 같습니다.
*.txt
name = *.txt
size > 10000
name = *.txt and size > 20000
attributes = H and name = *.doc
name = *.cs~ and mtime < 2009-02-14
mtime < 2009-01-01 and (name = *.cs or name = *.vb)
(name = '* Report.docx' or name = *.pptx)
... MTIME이 "마지막 쓰기 시간"을 암시하는 경우, Atime은 "마지막 액세스 시간"을 암시하고 CTime은 "생성 시간"을 암시하며 속성은 System, Hidden, Readonly, Archive 및 ContentIndexed와 같은 NTFS 속성 세트를 나타냅니다. H, R, A, I).
개입 공간이있을 때만 파일 이름 패턴 주위에 단일 따옴표가 필요합니다.
이 파일 선택기 클래스의 소스를 잡고 어디서나 사용할 수 있습니다.
Windows Search API를 사용할 수 있습니다 이 방법, 그러나 나는 그런 식으로 마음에 들지 않습니다.
디렉토리를 직접 색인 할 시간이 있다면 시도하는 것이 좋습니다. Lucene.net, 이것은 Windows 인덱싱 서비스보다 빠릅니다.
어쨌든 가장 짧은 방법은 System.io.directoryInfo.getDirectories를 사용하는 것입니다.
directoryInfo.getFiles는 하위 디렉토리를 통해 재귀를 지원합니다. 과부하 된 방법 중 하나입니다. 그러나 파일 이름으로 만 필터링 할 수 있습니다.
.NET 2.0 이상을 사용하는 경우 (및 vb.net)my.computer.filesystem.getfiles 메소드. 이 방법에는 세 가지 매개 변수가 있습니다.
- 예배 규칙서
- SearchType (열거)
- 와일드 카드
그만큼 SearchType 열거 그 중 하나는 두 가지 가치가 있습니다 SearchAllSubdiRectories. 따라서 일치하는 모든 파일 (이름)의 readonly 문자열 모음을 반환하는 1 메소드.
C#을 사용하는 경우 사용할 수 있습니다. directoryInfo.getFiles 메소드 . directoryInfo.getFiles에는 2 개의 매개 변수 만 있습니다.
- SearchPattern
- searchOption
지정하는 경우 AllDirectories 검색의 경우 비슷한 결과를 얻을 수 있습니다.
주요 차이점은 FileSystem.getFiles가 문자열 모음으로 반환하는 반면 DirectoryInfo.getFiles는 FileInfo 객체의 배열을 반환한다는 것입니다.