2017-11-09 27 views
0

저는 초보자 C 프로그래머입니다. dir을 열어 파일 이름을 읽고 stat를 사용하여 해당 파일에 대한 정보를 제공하려고합니다. 여기서는 디렉토리 또는 파일인지 확인하려고합니다. 나중에 아예 수정 된 시간과 파일 크기 등을 얻습니다. 이제는 한 레벨 만 얻었습니다. 및 .. 파일. 왜?Dir에 대한 포인터 및 파일 정보를 stat와 함께

./check Dirc 
whats in Dirc 
two dir and two files 
Program/ ProgramX/ test test2 



Dir *ptrDir; 
struct dirent *stDir; 
struct stat buff; 
if(ptrDir = opendir(argv[1]) !=NULL){ 
    printf("%s\n",argv[1]); 
    while((stDir = readdir(ptrDir)) != NULL){ 
     if(stDir->d_name[0] !='.'){//i dont want the hidden files 
      if((stDir->d_name, &buff) == -1){ perror("stat broke");} 
      printf("stDir name: %s\n", stDir->d_name); 
      switch(buff.st_mode &s_IFMT){ 
       case S_IFDIR: printf("Directory\n"); break; 
       case S_IFREG: printf("File\n"); break; 
       default: print("default\n"); 
      } 
     } 
} 
} 




OutPut: 
Data: 
stDir name: Program 
stat broke: No such file or directory 


Expected OutPut: 
OutPut: 
Data: 
stDir name: Program 
Directory 
stDir name: ProgramX 
Directory 
stDir name: test 
File 
stDir name: test2 
File 
+0

나는 그것을 알아 냈다. 나는 man 페이지를 더 잘 읽었어야했다. 나는 파일이 어디에 있는지에 따라 경로를 만드는 것을 끝내었다. 그래서 나는 strcpy와 strcat를 많이 사용했다. – humbleSquid

답변

0

그래서 더 나은 맨 페이지를 읽었어야합니다. 정말로 내가하지 않은 것은 발견 된 파일이 '.'이 아닌지 확인하는 것이 었습니다. 앞에 있지 않은 경우 파일을 가져 와서 stat에 배치 할 경로를 만듭니다.

while ((stDir = readdir(pDir)) != NULL) { 
      char * ePath = malloc(strlen(Data)); 
      strcpy(ePath,Data); 
      strcat(ePath,stDir->d_name); 
    if (oneFlag[1] == 'a'){ 
      printf(" %10s\n", stDir->d_name); 
    } else if (oneFlag[1] == 'l') { 
     if (stDir->d_name[0] != '.') { 
    //printf("ePath value %s \n",ePath); 
      if(stat(ePath, &buff) == -1){ perror("perror-stat broke"); exit(-1); }....