문제

"일반"이라도 특정 파일 이이 프로그램에 나열되지 않은 이유를 알고 있습니까? :

#include <stdio.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/stat.h>
#include <dirent.h>

int main(void) {
  DIR *dh = opendir("./"); // directory handle
  struct dirent *file; // a 'directory entity' AKA file    
  struct stat info; // info about the file.
  while (file = readdir(dh)) {
    stat(file->d_name, &info);
    printf("note: file->d_name => %s\n", file->d_name);
    printf("note: info.st_mode => %i\n", info.st_mode);
    if (S_ISREG(info.st_mode))
      printf("REGULAR FILE FOUND! %s\n", file->d_name);
  }
  closedir(dh);

  return 0;
}

이 프로그램을 실행 한 후 다음을 얻습니다.

note: file->d_name => .
note: info.st_mode => 16877
note: file->d_name => ..
note: info.st_mode => 16832
note: file->d_name => .DS_Store
note: info.st_mode => 16832
note: file->d_name => ef efeff
note: info.st_mode => 16832
note: file->d_name => ffffff
note: info.st_mode => 16832
note: file->d_name => ffffff - copie
note: info.st_mode => 16832
note: file->d_name => folder
note: info.st_mode => 16832
note: file->d_name => printiie.tt
note: info.st_mode => 16832
note: file->d_name => test.c
note: info.st_mode => 33188
REGULAR FILE FOUND! test.c
note: file->d_name => z
note: info.st_mode => 33188
REGULAR FILE FOUND! z

보시다시피, 프로그램은 두 파일 만 볼 수 있습니다. 그러나 모든 파일은 규칙적이며 폴더는 하나뿐입니다.

다음은 Shell Command의 과거 사본입니다. $ ls -lai :

total 64
2421444 drwxr-xr-x  10 denis  staff   340 27 oct 22:19 .
2416789 drwxr-xr-x@ 28 denis  staff   952 27 oct 22:20 ..
2423204 -rw-r--r--@  1 denis  staff  6148 27 oct 21:41 .DS_Store
2423206 -rwxr-xr-x@  1 denis  staff   895 27 oct 19:57 ef efeff
2423183 -rwxr-xr-x@  1 denis  staff   895 27 oct 19:57 ffffff
2423216 -rwxr-xr-x@  1 denis  staff   895 27 oct 19:57 ffffff - copie
2423436 drwxr-xr-x   2 denis  staff    68 27 oct 21:57 folder
2423180 -rw-r--r--@  1 denis  staff    38 27 oct 21:32 printiie.tt
2423682 -rw-r--r--@  1 denis  staff   895 27 oct 19:57 test.c
2423208 -rwxr-xr-x@  1 denis  staff    34 27 oct 21:39 z

각 파일의 이름을 나열하지만 디렉토리가 없습니다. 나는 Mac OS X에서 일하지만 이것이 문제의 원인이라고 생각하지 않습니다.

도움이 되었습니까?

해결책

그것은처럼 보인다 stat 일부 파일에 대한 기능이 실패하므로 info Struct는 업데이트되지 않으며 여전히 데이터가 있습니다. "..". 해당 라인을 다음과 같이 바꿉니다.

if (stat(file->d_name, &info))
{
    printf("error: stat(%s): %s\n", file->d_name, strerror(errno));
    continue;
}

.. 그리고 당신은 그 이유를 알 수 있습니다.

다른 팁

한 번은 하위 디렉터를 포함하여 모든 YML 파일을 디렉토리에 나열해야했습니다. 승리 XP에 있었다 :system("dir C:\Path\To\File\*.yml /B /S >> list.txt"); 그리고 나는 그들을 모두 얻기 위해 list.txt를 구문 분석 할 것입니다. 한 줄은 하나의 파일이었습니다. 쉽지만 휴대용은 아닙니다. 또한 그것은 얼마 전였습니다 - 이제 나는 아마도 부스트를 시도 할 것입니다.

편집 :이 답변은 코드에 관한 것이 아니라 다음과 같습니다.

실제로 나는 단지 각 파일의 이름을 나열하지만 디렉토리가없는 것입니다.

그가 나와 같은 접근 방식을 취했다면, 그는 문제를 해결할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top