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