1. 程式人生 > >C++實現Linux和Windows下遍歷指定目錄下的檔案

C++實現Linux和Windows下遍歷指定目錄下的檔案

一、Linux下遍歷方法

方法非常簡單,這裡不多說了,可以直接看程式碼
#include <dirent.h>//遍歷系統指定目錄下檔案要包含的標頭檔案
#include <iostream>
using namespace std;

int main()
{
    DIR* dir = opendir("/home/hanchao/picture");//開啟指定目錄
    dirent* p = NULL;//定義遍歷指標
    while((p = readdir(dir)) != NULL)//開始逐個遍歷
    {
        //這裡需要注意,linux平臺下一個目錄中有"."和".."隱藏檔案,需要過濾掉
        if(p->d_name[0] != '.')//d_name是一個char陣列,存放當前遍歷到的檔名
        {
            string name = "/home/hanchao/picture/" + string(p->d_name);
            cout<<name<<endl;
        }
    }
    closedir(dir);//關閉指定目錄
}
這裡需要注意,由於p->d_name存放的是檔名,所以也可以通過像strstr(p->d_name,".jpg")等來判斷,遍歷指定型別的檔案。 資料夾中: 執行結果:

二、Windows下遍歷指定目錄下所有檔案

同樣,直接看程式碼吧。
#include <io.h>//所需標頭檔案
#include <iostream>
#include <string>

using namespace std;

void getAllFileNames(const string& folder_path)
{
	_finddata_t file;
	long flag;
	string filename = folder_path + "\\*.jpg";//遍歷制定資料夾內的jpg檔案
	if ((flag = _findfirst(filename.c_str(), &file)) == -1)//目錄內找不到檔案
	{
		cout << "There is no such type file" << endl;
	}
	else
	{
		//通過前面的_findfirst找到第一個檔案
		string name = folder_path + "\\" + file.name;//file.name存放的是遍歷得到的檔名
		cout << name << endl;
		//依次尋找以後的檔案
		while (_findnext(flag, &file) == 0)
		{
			string name = string(folder_path + "\\" + string(file.name));
			cout << name << endl;
		}
	}
	_findclose(flag);
}

int main()
{
	getAllFileNames("test");//test是制定的目錄
}
這裡在Windows下尋找所有檔案也會有“.”和".."檔案,如果要遍歷目錄下的所有檔案,則需要過濾這兩個,過濾方法同Linux方法。 test原目錄下檔案: 執行結果: