2017-11-09 4 views
0

私は初心者のCプログラマです。 私はdirを開き、それらのファイルの名前を読み込み、statを使ってそれらのファイルに関する情報を与えようとしています。ここでは、それらがディレクトリかファイルかを調べようとしています。後日、変更された時間とファイルのサイズなどを取得します。現在、私は1つのレベルしか取得していません。および..ファイル。どうして?ディレクトリにアクセスするためのDIRポインタとファイル情報を

./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); }.... 
関連する問題