我在C語言函數中遇到問題。我的應用程序必須列出兩個目錄中的所有文件(尚未實現第二個目錄)。當dir1設置爲「。」時爲當前目錄它列出所有文件。如果我將其更改爲所需的目錄,它將只列出一個文件。C stat()忽略文件
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h>
main()
{
DIR *dir1;
DIR *dir2;
dir1 = opendir ("/home/tom/Documents/Uni/Dropbox/OS/C/1/");
dir2 = opendir ("/home/tom/Documents/Uni/Dropbox/OS/C/2/");
struct dirent *ent;
struct stat fileStat;
if (dir1 != NULL)
{
/* while there are files to read in the directory */
while ((ent = readdir (dir1)) != NULL)
{
/*printf ("In 1\n"); <--debugging--> */
if (stat(ent->d_name,&fileStat) == 0)
{
/* ignores . and .. and hidden files */
/* printf ("In 2\n"); <--debugging--> */
if(ent->d_name[0] != '.')
{
/* printf ("In 3\n"); <--debugging--> */
printf ("\n");
printf ("File: %s\n", ent->d_name);
printf ("File size: %d\n", fileStat.st_size);
printf ("-----------------------------------\n");
}
}
}
/* close the 1st directory */
closedir (dir1);
/* close the 2nd directory */
closedir (dir2);
}
else
{
/* prints an error if the directory can not be opened */
perror ("");
}
}
運行程序的結果如下:
[email protected]:~/Documents/Uni/Dropbox/OS/C$ ./ffffuuuuuu
File: ffffuuuuuu.c
File size: 1045
-----------------------------------
這是目錄中的LS的是讀取結果:
[email protected]:~/Documents/Uni/Dropbox/OS/C/1$ ls -l
total 36
-rw-r--r-- 1 tom tom 356 Dec 12 23:36 cwTest2.c
-rw-r--r-- 1 tom tom 322 Dec 12 23:36 cwTest.c
-rw-r--r-- 1 tom tom 627 Dec 12 23:36 ffffuuuuuu.c
-rw-r--r-- 1 tom tom 6 Dec 12 23:32 file
-rw-r--r-- 1 tom tom 6 Dec 12 23:32 file2
-rw-r--r-- 1 tom tom 6 Dec 12 23:45 file2.file
-rw-r--r-- 1 tom tom 15 Dec 12 23:33 file3
-rw-r--r-- 1 tom tom 15 Dec 12 23:45 file3.file
-rw-r--r-- 1 tom tom 6 Dec 12 23:45 file.file
在此先感謝, 湯姆。
你目前的目錄是什麼?這些條目是相對於「/ home/tom/Documents/Uni/Dropbox/OS/C/1 /」(你應該給stat()完整路徑名)還有:條目比「。」多。和「..」以「。」開頭。 – wildplasser
輸出stat的錯誤,你就會知道問題是什麼。 – Beginner
@wildplasser我運行在/ home/tom/Documents/Uni/Dropbox/OS –