2011-03-04 1 views
0

다른 버전에서 다중 스레드 및 다중 처리를 사용하여 사용자가 입력 한 루트 폴더를 구문 분석하고 싶습니다. 그러나 다음에 폴더 나 파일이 있는지 여부를 루트 폴더를 통해 구문 분석하는 동안 어떻게 구별 할 수 있습니까? 요약하면 나는 다가오는 파일이나 폴더를 구별 할 수있는 방법을 배우고 싶다. 나는 이것이 폴더라면,이 폴더를 동적 스레드 및/또는 process.If 파일로 여는 것을 허용하기 때문에 이것을 배우고 싶다. 기존 스레드 또는 프로세스는 다른 스레드 및/또는 프로세스를 만들 필요없이 작업을 계속할 수 있습니다. 문제점을 표현할 수 있기를 바랍니다. 응답을 기다리고 있습니다. 감사합니다.루트 폴더로 구문 분석하는 동안 어떻게 파일 또는 C 언어로 폴더 여부를 곧 구별 할 수 있습니까?

답변

0

stat() function을 사용하여 경로가 파일 또는 디렉토리를 참조하고 반환 된 구조의 st_mode 필드를 점검 할 수 있습니다 (http://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/stat.h.html 참조).

Windows에서는 GetFileAttributesEx을 사용하여 파일 또는 디렉토리인지 여부를 확인할 수있는 파일 속성을 가져올 수 있습니다.

다른 스레드 나 프로세스가 파일 시스템을 동시에 업데이트하는 경우 사용하는 내용이 모두 경쟁 조건이 될 수 있습니다. 파일/디렉토리는 사용자가 확인한 후에 삭제되거나 변경 될 수 있으므로 액세스하기 전에

0

다음은 몇 가지 간단한 샘플입니다. 여러 루트 위치에서 스레드를 실행하고 이러한 경로를 반복적으로 호출하고 모든 데이터를 동기화하는 것은 전적으로 사용자의 몫입니다.

* nix 시스템에서;

struct dirent *entry; 
while ((entry = readdir("/root")) != NULL) 
{ 
    if (entry->d_type == DT_DIR) 
    { 
     // do something 
    } 
} 
closedir(dir); 

윈도우즈 :

WIN32_FIND_DATA findData; 
HANDLE hFind = FindFirstFile(("C:\\root" + "*.*").c_str(), &findData); 
do 
{ 
    if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
    { 
     // do something 
    } 

} while (FindNextFile(hFind, &findData)); 

FindClose(hFind); 
관련 문제