C++ 獲取文件夾下的全部文件名

頭文件:#include<io.h>html

getFiles1函數:獲取某個文件夾下的全部文件,返回各文件的路徑app

getFiles2函數:獲取某個文件夾下的全部文件,返回各文件的路徑和名稱ide

//主函數
char
* filePath = "D:\\sample"; vector<string> files; //vector<string> filesname;
//獲取該路徑下的全部文件路徑 getFiles1(filePath, files);
//獲取該路徑下的全部文件路徑和文件名
//getFiles2(filePath, files, filesname);
char str[30]; for (int i = 0;i < files.size();i++) { cout<<files[i].c_str()<<endl; }

 

void getFiles1( string path, vector<string>& files ) { //文件句柄 
    //long hFile = 0; //win7
intptr_t hFile = 0; //win10
//文件信息 struct _finddata_t fileinfo; string p; if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) != -1)
// "\\*"是指讀取文件夾下的全部類型的文件,若想讀取特定類型的文件,以png爲例,則用「\\*.png」 {
do { //若是是目錄,迭代之 //若是不是,加入列表 if((fileinfo.attrib & _A_SUBDIR)) { if(strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0) getFiles1( p.assign(path).append("\\").append(fileinfo.name), files ); } else { files.push_back(path + "\\" + fileinfo.name); } }while(_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } }

 

void getFiles2( string path, vector<string>& files, vector<string> &ownname) { /*files存儲文件的路徑及名稱(eg. C:\Users\WUQP\Desktop\test_devided\data1.txt) ownname只存儲文件的名稱(eg. data1.txt)*/
    
    //文件句柄 
    long   hFile   =   0; //文件信息 
    struct _finddata_t fileinfo; string p; if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) !=  -1) { do { //若是是目錄,迭代之 //若是不是,加入列表 
            if((fileinfo.attrib & _A_SUBDIR)) {  if(strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0) getFiles2( p.assign(path).append("\\").append(fileinfo.name), files, ownname );  } else { files.push_back(path +"\\" + fileinfo.name); ownname.push_back(fileinfo.name); } }while(_findnext(hFile, &fileinfo)  == 0); _findclose(hFile); } }

Win10下C++代碼文件夾遍歷錯誤:0xC0000005: 寫入位置時發生訪問衝突

win7下定義的文件句柄類型是long型,在win10下將其改成intptr_t類型便可。函數

參考博客:spa

http://www.javashuo.com/article/p-vgdeuzft-co.htmlcode

https://www.cnblogs.com/wqpkita/p/6849283.htmlhtm

相關文章
相關標籤/搜索