C 讀取某個資料夾下面的子資料夾及其所有檔案

2021-10-18 04:14:00 字數 3615 閱讀 8384

下面是輸出當前目錄下的所有資料夾以及檔案的絕對路徑(當然也可以是相對路徑,由輸入的路徑決定),下面的函式介面可以改裝為單輸出檔案或者資料夾的介面,這是乙個大方面的總介面。

#include #include #include #include #include using namespace std;

void getallfiles(string path, vector& files)

}else //檔案處理

} while (_findnext(hfile, &fileinfo) == 0); //尋找下乙個,成功返回0,否則-1

_findclose(hfile);

}}//測試

void main()

;

對於不同的_finddata_t結構,time_create、time_access和time_write的型別為_time32_t或_time64_t,size的型別為_fsize_t或__int64,name為char[_max_path]或wchar_t[_max_path]。

unsigned型別,檔案屬性。

_time32_t/_time64_t型別,檔案建立時間(fat檔案系統為-1)。以utc格式儲存,如果需要轉換成當地時間,使用localtime_s()。

_time32_t/_time64_t型別,檔案最後一次被訪問的時間(fat檔案系統為-1)。以utc格式儲存,如果需要轉換成當地時間,使用localtime_s()。

_time32_t/_time64_t型別,檔案最後一次被寫入的時間。以utc格式儲存,如果需要轉換成當地時間,使用localtime_s()。

_fsize_t/__int64型別,檔案的長度(以位元組為單位)。

char[_max_path]/wchar_t[_max_path]型別,檔案/目錄名,不包含路徑。

對於不支援檔案建立時間、檔案上一次訪問時間的檔案系統,time_create和time_access為-1。

_max_path在stdlib.h中被定義為260。

一般_finddata_t被定義為_finddata32_t/_finddata64i32_t,_wfinddata_t被定義為_wfinddata32_t/_wfinddata64i32_t。為方便,下文中將_finddata_t和_wfinddata_t統稱為_finddata_t。

乙個檔案/目錄可以有多種屬性,每種屬性可以是下面列出的屬性之一。

檔案。檔案被backup指令改變或清除時被設定。值:0x20。

隱藏。使用dir指令一般看不到,除非使用/ah選項。值:0x02。

唯讀。不能以「寫」為目的開啟該檔案,並且不能建立同名的檔案。值:0x01。

子目錄。值:0x10。

系統檔案。使用dir指令一般看不見,除非使用/a或/a:s選項。值:0x04。

要檢查x是否含有某個屬性a,可以用x & a進行檢查。指定多個屬性可以使用按位or運算子,例如_a_system | _a_rdonly | _a_hidden。

遍歷檔案目錄時需要使用萬用字元。

_findfirst()/_findnext()/_findclose()函式

intptr_t _findfirst(

const char * filespec,

struct _finddata_t *fileinfo

);

實際上_findfirst()有10個版本,這裡只列出乙個。

const char */const wchar_t *型別,目標檔案說明(可包含萬用字元)。

_finddata_t *型別,函式將會填入檔案/目錄資訊。

返回值

如果成功,返回乙個唯一的搜尋控制代碼標識乙個或一組和filespec說明匹配的檔案,可以用於接下來的_findnext()和_findclose()函式。否則_findfirst()返回-1。注意,intptr_t並不是指標型別,只是int或__int64的typedef。

int _findnext(

intptr_t handle,

struct _finddata_t *fileinfo

);

handle

intptr_t型別,搜尋控制代碼。

fileinfo

_finddata_t *型別,函式將會填入檔案/目錄資訊。

返回值

如果成功,返回0,否則返回-1。如果沒有更多能夠找到的檔案了,也會導致失敗。

int _findclose(

intptr_t handle

);

關閉搜尋控制代碼並釋放相應的資源。

handle

搜尋控制代碼。

返回值

成功返回0,失敗返回-1。

#include #include // for strcat()

#include using namespace std;

void listfiles(const char * dir);

int main()

void listfiles(const char * dir)

dowhile (_findnext(handle, &finddata) == 0); // 查詢目錄中的下乙個檔案

cout << "done!\n";

_findclose(handle); // 關閉搜尋控制代碼

}

程式遍歷目錄下的所有檔案/目錄,如果是檔案則輸出檔案大小。

注意_findnext()函式成功返回0,因此要加上==0或!=-1進行判斷,不能省略。

此外還有乙個值得注意的地方:

if (finddata.attrib & _a_subdir

&& strcmp(finddata.name, ".")

&& strcmp(finddata.name, "..")

)...

使用_findfirst()、_findnext()進行搜尋時,可能會得到".「和」…"兩個資料夾名。這兩個值可以忽略。

注意是「目錄中」而不是「目錄下」,這個程式將會遍歷乙個目錄裡包含的所有檔案。

#include #include // for strcpy(), strcat()

#include using namespace std;

void listfiles(const char * dir);

int main()

void listfiles(const char * dir)

else

cout << finddata.name << "\t" << finddata.size << " bytes.\n";

} while (_findnext(handle, &finddata) == 0);

_findclose(handle); // 關閉搜尋控制代碼

}

C 刪除清空資料夾及拷貝資料夾下面的內容

c 刪除清空資料夾及拷貝資料夾下面的內容的方法 直接呼叫就行,只要引數傳的對,一定可以成功 拷貝檔案及資料夾 拷貝檔案及資料夾 原始檔 目標檔案 public static void copydirectory string srcpath,string destpath copydirectory...

讀取Windows資料夾下面檔名

在vs工程中新增lib檔名稱比較麻煩,通過 將需要的檔名儲存在txt檔案彙總 在網上找到了一段 修改一下成功執行!test max.cpp 定義控制台應用程式的入口點。include stdafx.h include include include include include include p...

C 遍歷資料夾及其子檔案(夾)

c 遍歷資料夾及其子檔案 夾 如下 int finder lpctstr pstr 一般檔案及資料夾 printf d s n i finder.getfilename bool bisdir finder.isdirectory if bisdir else end while finder.cl...