주어진 디렉토리 경로의 모든 파일을 재귀 적으로 나열 할 수있는 휴대용 파일 시스템 스캐너를 작성하려고합니다.Cygwin을 사용한 C++ 재귀 파일/디렉토리 검색
#include <dirent.h>
#include <stdio.h>
int main(void)
{
DIR *d;
struct dirent *dir;
d = opendir(".");
if (d)
{
while ((dir = readdir(d)) != NULL)
{
// Stuff
}
closedir(d);
}
return(0);
}
을 그러나뿐만 아니라 검색 재귀 디렉토리를 추가해야합니다
내가, 내 컴파일러 Cygwin에서 사용하려고 시도하는 dirent.h를 사용을하고 템플릿을 사용하고,이 작업을 수행합니다. 이렇게하려면 내 해결책은 다음 파일에 opendir()을 시도한 다음 오류 코드를 판단하여 디렉토리가 성공적으로 열렸는지 여부를 판별 한 후 (다시 검색 할 때) 또는 ' 디렉토리 '로 표시되며, 파일로 표시됩니다.나는 그것이 매우 klugey라고 느낀다는 것을 인정하지만 나는 수 시간의 검색 후에도 이식성 (win32가 아님)을 유지할 수있는 더 나은 방법을 찾을 수 없었다.
이 같은그래서 내 간단한 솔루션 (단순 일부 사이비)를 찾고 뭔가 : 나는 매우 해요하지만 (
int scan(string startdir) { DIR *d; struct dirent *dir; d = opendir(startdir.cstr()); if (d) { while ((dir = readdir(d)) != NULL) { if(NOT '.' AND NOT '..') { if(temp = opendir(startdir + d) == NULL) { //FILE OR ERROR }else{ //Opened successfully as a directory, so recurse scan(startdir + d->d_name + "\\"); } } } closedir(d); } return(0); }
이 절반 다시 작성 사이비 코드를 간단하게 할 수 있지만, 그것을 작동하는 것 같다 이것을하기위한 더 좋은 방법에 대한 제안을 열어 라.)
그러나 중요한 문제는 특정 링크 파일 'c : \ cygwin \ dev \ fd'입니다.이 링크는 디렉토리로 열리고 반복적으로 반복적으로 반복해서 열리는 것으로 보입니다.
'fd'파일은 확장자가없는 4KB이며 106 바이트이며 Windows의 어느 부분도 가리 키지 않는 바로 가기입니다.
이 오류는 하나이 kludgey 방법은 도청을 나타 내기 위해 것, 또는 내가에서 컴파일하고있어 Cygwin에서 구현에 문제가있다 짧은 예를 들어
:.
Error Reading: c:\cygwin\dev\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\5\fd\0 No such file or directory
것을 제외 검색 결과가 잘 작동하는 것 같습니다. 그러나 나는 스캐너에 배타적 인 코딩을하지 않아도 괜찮습니다.
누구든지이 문제에 대한 아이디어, 제안, 해결책 또는 다른 방법이있는 경우 귀하의 의견을 보내 주시면 감사하겠습니다.
감사합니다.
아마 좋은 생각 일 것이지만, 더 높은 업에서 더 이상의 토론과 승인을 필요로하는 다른 라이브러리 (무료 라이브러리 포함)를 사용하는 것은 주저합니다. 나는 그것을 더 자세히 살펴보고 (다른 곳에서도 언급했듯이) 아마도 피치를 만들 것이다. 의견을 보내 주셔서 감사합니다 – KevenK