頭文件:#include<dirent.h>
DIR *opendir(const char *dirname); 打開目錄
struct dirent *readdir(DIR *dirp);讀取目錄
int closedir(DIR *dirp);關閉目錄
1、opendir(const char *dirname)
- 作用:打開目錄
- 參數:*dirname :目錄名--字符數組或者字符串常量
比如 . :當前目錄
tmp:子目錄名 也可寫成./tmp
- 返回值:返回指向目錄dirname的DIR結構體的指針
DIR結構體定義:
struct __dirstream
{
void *__fd;
char *__data;
int __entry_data;
char *__ptr;
int __entry_ptr;
size_t __allocation;
size_t __size;
__libc_lock_define (, __lock)
};
使用:
DIR *dir_p; if ((dir_p = opendir(dirname)) == NULL) { printf("dir ERROR\n"); } else { }
2、 struct dirent *readdir(DIR *dirp)
- 作用:讀取目錄
- 參數:*dirp 使用opendir后返回的DIR結構體的指針
- 返回:指向目錄“dirname”的結構體指針dirent*
dirent結構體定義:
struct dirent
{
long d_ino; //該文件的索引節點號
off_t d_off; //文件在目錄中的偏移
unsigned short d_reclen; //文件長度
char d_name [NAME_MAX+1]; //文件名稱
}
- 使用:
struct dirent *direntp; while ((direntp = readdir(dir_p)) != NULL)
讀取目錄后,我們就要對文件進行處理,獲取文件的具體信息stat(const char *file_name, struct stat *buf),此時可以用到頭文件
#include <sys/stat.h> 這個我將在另一個隨筆中細講.
3、int closedir(DIR *dirp);
- 作用:關閉目錄
4、總結
如果想要獲取a目錄下b文件的具體信息
首先使用opendir(a),獲得指向目錄a的DIR結構體的指針dirp,再使用readdir(dirp),返回指向目錄a下所有文件的dirent結構體的指針direntp,
每次循環,direntp指向下一個文件,通過判斷direntp->d_name是否==b,則可找到b文件,再通過stat(direntp->d_name,&st)[struct stat st;],將b文件的具體信息存儲在stat結構體st中。
最后關閉a目錄即可。