2009-07-14 8 views
3

저는 C++로 워킹하고 있습니다. 디렉토리에 하위 디렉토리가 있는지 여부를 확인하는 방법이 있습니까?디렉토리에 하위 디렉토리가 있는지 여부를 확인하는 방법이 있습니까?

CFileFind는 전체 파일을 검색해야합니다. 유일한 하위 디렉토리가 목록의 끝에 있고 많은 파일이있는 경우 시간이 오래 걸립니다.

예 : 디렉토리 A에는 99995 개의 파일과 FindNextFile List 끝에 하나의 하위 디렉토리가 있습니다. 내가 99995 번 시도한 다음 말하기를 : 예, 하위 디렉토리가 포함되어 있습니까?

답변

0

매우 빠르게 수행 할 수 있는지 여부는 전적으로 플랫폼에 따라 다릅니다.

Win32에서는 FindFirstFile/FindNextFile 또는 MFC CFileFind와 같은 래퍼를 사용하고 먼저 디렉터리를 나열 할 수없는 순서로 항목을 나열합니다.

+0

99995 개의 파일과 하나의 하위 디렉토리, FindNextFile List의 끝. 내가 99995 번 시도한 다음 말하기를 : 예, 하위 디렉토리가 포함되어 있습니까? – user25749

+0

Yeap, 그게 Win32에서 디렉터리 내용을 나열하는 유일한 방법입니다. 그래서 Explorer에서 많은 파일을 가진 폴더를 여는 데는 많은 시간이 걸립니다. – sharptooth

+1

OMG, 정말 나쁜 디자인 ... – user25749

1

.Net 프레임 워크를 사용하는 경우 Directory.GetDirectories을 사용할 수 있으며 배열의 크기는 0인지 확인하십시오. 이것이 속도를 줄 경우 어떻게해야할지 모르겠다.

디렉토리를 제어 할 수있는 경우 명명 규칙을 적용하여 하위 디렉토리가있는 디렉토리가 한 방향으로 지정되고 하위 디렉토리가있는 디렉토리가 다른 디렉토리로 명명됩니다.

1

부스트 파일 시스템 라이브러리를 사용해 볼 수 있습니다.

이름에 따른 클래스 directory_iterator [boost/filesystem/operations.hpp에 선언되어 있습니다] 파일을 나열하는 데 사용할 수있는 많은 기능이있어 파일이 하위 디렉토리인지 여부를 찾습니다 (is_directory - 찾고 있습니다).

자세한 내용은 다음 링크를 참조하십시오. link text

MFC [그냥 CFileFind를 사용하는 것을 보았습니다]를 사용하고있는 것으로 보입니다. 죄송합니다. 많은 정보가 없었습니다. FindFirstFile/FindNextFile을 사용해야 할 수도 있습니다.

+0

많은 분들께 감사드립니다! 부스트 파일 시스템이 유용합니다. 나는 리눅스에서 작업 할 때 그것을 사용했다. – user25749

+3

부스트 프리미티브가 Win32에서 FindFirstFile/FindNextFile을 사용한다고 가정한다. 그들이하지 않으면 어떻게 작동하는지 찾아보고 그 솔루션이 더 나은지 확인할 수 있습니다. – sharptooth

2

Microsoft의 Raymond Chen이 여기에 아마 적용되는 게시물을 작성했습니다 : Computing the size of a directory is more than just adding file sizes. 본질적으로, 그는 다른 사용자가 다른 권한을 가질 수 있기 때문에 dir의 항목에 dir의 크기와 같은 정보를 저장할 수 없으므로 파일의 일부를 보이지 않게 할 수 있다고 설명합니다. 따라서 사용자가 볼 수있는 크기를 얻는 유일한 방법은 사용자의 요청에 따라 크기를 계산하는 것입니다.

귀하의 경우, 답변은 아마도 동일한 추론에서 비롯됩니다. 루트 디렉토리보기가 다른 자격 증명으로 실행중인 다른 앱과 다를 수 있으므로 앱에서 사용할 수있는 디렉토리 목록은 앱에서 요청할 때만 결정될 수 있습니다. Windows가 모르는 파일과 함께 디렉토리를 저장하는 이유는 그것이 주어진 것입니다.

Win32는 사용자 모드에서 파일 시스템에 가깝기 때문에 인터페이스를 단순화하기 때문에 .NET과 같은 상위 수준 솔루션은 사용하지 않는 것이 좋습니다. 운전자가 더 빨리 일할 수도 있지만, 내 지식 범위를 벗어납니다.

관련 문제