我是新手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
答案 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); }....