日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用C语言查看一个文件夹中所有文件及目录

發布時間:2024/1/23 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用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语言查看一个文件夹中所有文件及目录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。