#include<stdio.h>
#include<stdlib.h>
#include<dirent.h>
#include<sys/stat.h>
int main(int argc, char *argv[])
{
DIR *dp;
struct dirent *dirp;
struct stat stbuf;
if (argc != 2)
printf("usage: ls directory_name\n");
if ((dp = opendir(argv[1])) == NULL)
printf("can’t open %s", argv[1]);
while ((dirp = readdir(dp)) != NULL){
stat(dirp->d_name,&stbuf);
if(S_ISDIR(stbuf.st_mode)){
printf("Directory: ");
}
printf("%s\n",dirp->d_name);
}
closedir(dp);
exit(0);
}
輸出:
$ ./a.out test/
dir3
d
c
Directory: .
Directory: a
Directory: ..
Directory: dir4
Directory: dir2
Directory: dir0
Directory: b
Directory: e
Directory: dir1
$
以下是該目錄下的「測試」包含的文件列表。
$ ls -F test/
a b c d dir0/ dir1/ dir2/ dir3/ dir4/ e
$
的預期結果是,如果該文件是目錄輸出將是「目錄:DIR1 /」。否則只有文件名。 但是,該程序的輸出不符合預期。該程序是否包含任何錯誤?有沒有讓我知道。
在此先感謝...
[在C中訪問目錄]的可能重複(http://stackoverflow.com/questions/3536781/accessing-directories- in-c) – Kninnug
(1)你需要檢查'stat()'的返回值來查看是否有錯誤。 (2)你正在調用'stat()'(例如)'dir2',但你需要通過'test/dir2'。 – psmears
我建議你檢查一下'stat'是否返回,我敢打賭它的大部分名字都是'-1'(意思是失敗)。 –