使用C语言查看一个文件夹中所有文件及目录
1.前言
1.1聲明
文章中的文字可能存在語法錯語以及標點錯誤,請諒解;
如果在文章中發現代碼錯誤或其它問題請告知,感謝!
2.實現方法
為了使用C語言實現查看一個文件夾中的文件數量功能,可以使用dirent庫,該庫文件包含的許多UNIX系統服務的函數原型,例如opendir函數、readdir函數,可以實現查看目錄中文件數量等功能。
2.1dirent中常用數據類型以及函數功能簡介
下面對dirent中常用的數據類型以及函數進行簡單的解釋:
常用結構體:
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) }; typedef struct __dirstream DIR;?DIR結構體類似于FILE,可以使用該結構體保存正在被讀取目錄的有關信息,例如打開目錄函數DIR *opendir(const char *FilePath), 該函數返回值為指向DIR結構的指針(句柄),通過該指針所指向的DIR類型的結構體,可以得到該目錄相關信息。
dirent的結構體:
struct dirent {long d_ino; /* inode number索引節點號 在<sys/types.h>文件該類型的描述*/off_t d_off; /* offset to this dirent 在目錄文件中的偏移*/unsigned short d_reclen; /*Length of this d_name 文件名長 */unsigned char d_type; /*the type of d_name 文件類型*/char d_name[NAME_MAX+1]; /*file name (null-terminated) 文件名,最長256字符 */} }一般該結構體配合readdir函數使用,也就是通過readdir函數獲取到的文件屬性保存到該結構體中。?
需要注意的是,對于dirent的結構體,我們經常能用到該結構體中d_ name 變量, 另外 ,short d_reclen是指這個文件的文件名長度,而不是文件大小。當然,如果要獲得該文件大小,可以使用sizeof ( d _name)實現。?
(當然,如果我們想要得到該文件的更多信息,可以使用stat函數實現,具體用法可以參見下面的博客:?
https://blog.csdn.net/farmwang/article/details/77996187)
通過上述介紹,可以簡單概括dirent結構體和DIR結構體的區別:dirent結構體保存的是文件屬性,DIR結構體保存的目錄屬性。
常用庫函數:
DIR *opendir(const char);
通過打開一個目錄路徑(const char)返回一個DIR類型的指針,后續對該目錄的讀取和搜索操作都使用該指針。
dirent *readdir(DIR *);
返回DIR中的目錄或者文件實體指針,類型為dirent,需要注意的是,當該函數再一次被調用的時候,該dirent指針指向下一個目錄或者文件實體。當函數返回NULL時,表明指針已經指向目錄的結尾。
void seekdir(DIR *dir, long int offset);
用來設置目錄操作流的讀取位置,調用seekdir函數的時候便從該位置進行讀取。參數offset表示相對于文件目錄開頭的偏移量。
int telldir(DIR *dir);
返回當前目錄流中指針位置。該位置是相對于文件開頭偏移量的下一個實體讀取位置的返回值。
2.2函數實現
2.2.1實現邏輯
實現方法一般為:
1.打開目錄(opendir());
2.讀取文件(readdir());
3.關閉目錄(closedir).
2.2.2函數例子
#include <stdio.h> #include "dirent.h>#define FilePath "/opt/test"int main() {int filesize = 0;DIR *dir = NULL;struct dirent *entry;if ((dir = opendir(FilePath)) == NULL) {printf("opendir failed!");return -1;} else {while (entry = readdir(dir)) {printf("filename%d = %s", i, entry->d_name); //輸出文件或者目錄的名稱printf("filetype = %d\n", entry->d_type); //輸出文件類型}closedir(dir);}return 0; }運行結果如下:
以上。?
參考文檔:?
1.https://blog.csdn.net/wangshubo1989/article/details/52994327?
2.https://blog.csdn.net/dream_allday/article/details/75243818?
3.https://blog.csdn.net/qq_20916555/article/details/51132642?
4.http://www.360doc.com/content/15/0701/10/5470123_481878714.shtml
?
不過,在實際的業務中,我用的是apr庫的較上一層的api,因為如果用系統的api還需要考慮平臺的問題。
?
?
轉載地址:https://blog.csdn.net/wangqingchuan92/article/details/80109793
?
?
總結
以上是生活随笔為你收集整理的使用C语言查看一个文件夹中所有文件及目录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Json Schema快速入门
- 下一篇: 网络请求中的cookie与set-Coo