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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux打开文件夹所有文件名,获取文件夹下的所有文件名 (linux windows)

發布時間:2023/12/29 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux打开文件夹所有文件名,获取文件夹下的所有文件名 (linux windows) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

windows下獲取文件夾下的所有文件名

1 #include "folder.hpp"

2 #include

3

4 void getFilesFromFolder(const string strpath,vector &vFile,const stringstrFileType)5 {6 intptr_t pHandle = 0; //文件句柄

7 struct _finddata_t stFileinfo; //文件信息

8 string strFolderName; //文件名

9

10 if ((pHandle = _findfirst(strFolderName.assign(strpath).append("\\*").c_str(), &stFileinfo)) != -1)//對指定路徑進行判斷

11 {12 while (_findnext(pHandle, &stFileinfo) == 0)//遍歷文件夾下的文件

13 {14 string strFileName =stFileinfo.name;15 if ((stFileinfo.attrib & _A_SUBDIR))//判斷是否為文件夾

16 {17 if (strFileName =="." && strFileName == ".." != 0)//排除當前目錄和上一級目錄

18 {19 getFilesFromFolder(strFolderName.assign(strpath).append("\\").append(strFileName), vFile);//遞歸

20 }21 }22 else

23 {24 if(strFileName.find(strFileType, 0)>=0)//將符合匹配要求的文件夾存起來

25 { vFile.push_back(strFolderName.assign(strpath).append("\\").append(strFileName)); }26 }27 }28 _findclose(pHandle);29 }30 }

此處要包含頭文件io.h

在這里_findfirst函數可以指定查找指定的文件“*.*”就是查找所有文件,"*.cpp"就是查找所有cpp文件,我這里沒有這么寫,感興趣的小伙伴可以試試

_finddata_t結構體內包含了一些基本的文件信息

struct _finddata_t {

unsigned??? attrib;    //所查找文件的屬性:_A_ARCH(存檔)、_A_HIDDEN(隱藏)、_A_NORMAL(正常)、_A_RDONLY(只讀)、 _A_SUBDIR(文件夾)、_A_SYSTEM(系統)。

time_t????? time_create; //創建文件的時間

time_t????? time_access; //最后一次訪問文件的時間

time_t????? time_write;  //最后被修改的時間

_fsize_t??? size;      //文件大小

char??????? name[260];   //文件名

};

linux下獲取文件夾下的所有文件名

1 #include

2 #include

3 #include

4 #include

5

6 using namespacestd;7

8 void getFilesFromFolder(const string& folderName,vector& vFiles,const stringstrFileType)9 {10 if (folderName.empty()) { return; } //字符串判斷

11

12 const int iRecursiveTimes = 3; //目標遞歸層數

13 static int s_iRecursiveTimes = 0; //當前遞歸層數14

15 //文件夾判斷

16 structstat stFolderStat;17 stat(folderName.c_str(), &stFolderStat);18 if (!S_ISDIR(stFolderStat.st_mode)) { return; }19

20 DIR* open_dir =opendir(folderName.c_str());21 if (NULL == open_dir) { return; } //打開失敗

22

23 dirent* pDirent =NULL;24 while( (pDirent = readdir(open_dir)) !=NULL) {25 structstat stFileStata;26 if (pDirent->d_name[0] != '.') {27 string name = folderName+string("/")+string(pDirent->d_name);28 stat(name.c_str(), &stFileStata);29

30 if (S_ISDIR(stFileStata.st_mode)) {//是目錄就進行遞歸

31 if(iRecursiveTimes == s_iRecursiveTimes) { continue; }32 else{ s_iRecursiveTimes++; }33 getFilesFromFolder(name,vFiles,strFileType);34 s_iRecursiveTimes--;35 }36 else if(S_ISREG(stFileStata.st_mode)) {37 if(name.find(strFileType,0)>=0) { vFiles.push_back(name); } //進行類型判斷并保存文件名38 //std::regex reg(strFileType);39 //if(std::regex_search(name,reg)) { vFiles.push_back(name); }

40 }41 }42 }43 closedir(open_dir);44 }

此處要包含頭文件dirent.h? sys/stat.h sys/types.h

這個linux下讀取文件名相比較上面windows下讀取文件名的方法使用了定義遞歸層數的方法,具體可以看注釋

ps:

一、為了方便進一步篩選我們想要的文件,這里為大家提供兩種篩選文件的方法:

1、stl string標準庫的find函數mystring.find(strKeywords,0)。

mystring是目標字符串、strKeywords是想匹配的關鍵字、0表示從第0個字符開始找,最后返回第一次出現關鍵字的位置,如果輸入空字符的關鍵字則返回0,沒有匹配的關鍵字就返回-1

2、用正則方式匹配字符。我注釋的地方為正則匹配的代碼

二、我這里輸入的路徑,最后的到的文件名帶路徑信息。這里大家可以靈活該程序,如果兩者都需要,這里為大家提供拆解的方法

對于linux平臺我沒有找到好辦法,有好辦法的小伙伴記得給我留言告訴我

一般方法是使用上面提到的string的find函數對“/”進行一步一步的拆分

三、一般情況下文件名是無序讀取的,就是說沒有按照文件名進行排序。

這里可以使用標準庫的sort函數進行排序

總結

以上是生活随笔為你收集整理的linux打开文件夹所有文件名,获取文件夹下的所有文件名 (linux windows)的全部內容,希望文章能夠幫你解決所遇到的問題。

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