使用stat

时间:2017-11-09 20:21:08

标签: linux pointers stat

我是新手C程序员。 我正在尝试打开目录并读取这些文件名称并使用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

1 个答案:

答案 0 :(得分: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);  }....