2011-04-01 3 views
2

dirent.h 헤더를 사용하여 디렉터리의 파일 크기를 가져 오려고했습니다. 그러나디렉터리의 파일 크기를 가져 오는 중

stat(ent->d_name, &statbuf) 

은 항상 -1을 반환하고 크기를 올바르게 가져올 수 없습니다. 그 이유는 무엇일까요?

답변

8

d_name에는 해당 디렉토리 내의 파일 이름이 들어 있습니다. stat은 현재 디렉토리가 아닌 한 디렉토리 부분을 포함하는 이름을 원합니다.

d_name 파일의 전체 경로가 포함 된 임시 문자열을 만듭니다.

편집 : 샘플

char const * DirName = "/tmp"; 
.... 
char * FullName = (char*) malloc(strlen(DirName) + strlen(ent->d_name) + 2); 
strcpy(FullName, DirName); 
strcat(FullName, "/"); 
strcat(FullName, ent->d_name); 
stat(FullName, &statbuf); 
free(FullName); 
+0

내가 통계에 디렉토리 이름을 준 후, 그것은 항상 파일 당 4096을 반환했습니다. – thetux4

+2

thetux4 : stat에 * directory *와 * file *로 구성된 문자열을 제공해야합니다. 디렉토리 이름 만 지정하면 일반적으로 4096에서 시작하는 디렉토리의 크기가 표시됩니다. – Erik

+0

감사합니다. Erik, 내 문제가 해결되었습니다. – thetux4

1

내가 C를 사용 ++ 나는 위의 코드가 작동 것이라고 생각했지만, 여전히 *는 char 빈에서 변환을 필요로했기 때문에 그것을하지 않았다 :

char *fullName = (char*) malloc(strlen(path) + strlen(entry->d_name) + 2); 

잘하면이 사람을 도울 수 있습니다 :)