C++獲取文件夾和文件信息_第1頁
C++獲取文件夾和文件信息_第2頁
C++獲取文件夾和文件信息_第3頁
C++獲取文件夾和文件信息_第4頁
C++獲取文件夾和文件信息_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、C+獲取文件夾和文件信息S_findfirst,_findnext和findclose方法BinhuaLiu0介紹本文的目的是介紹C+中如何通過findfirst,和findclose方法來查找文件夾中所有子文件夾和文件.本文還討論了使用SHGetFileInfo函數(shù)和結(jié)構(gòu)體來獲取文件/文件夾的詳細(xì)信息。0庫和頭文件為了使用findfirst,_findnext和findclose方法,需要包含頭文件:io.h中包含大量對文件系統(tǒng)進(jìn)行底層操作的函數(shù)。本文例子中使用了字符串宏,因此還需要包含頭文件:0函數(shù)族和宏定義為了適應(yīng)各種不同的編譯環(huán)境,Microsoft往往對C+函數(shù)給出多個版本的實現(xiàn)。_

2、findfirst,_findnext和以及finddata_t根據(jù)以下編譯環(huán)境的不同給出了多種實現(xiàn)采用多字符集或Unicode字符集采用32位時間或64位時間3.采用32位文件長度或64位文件長度所有函數(shù)實現(xiàn)列表如下:MBCS/UnicodetimetypefilelengthtypeFunctionsMBCS32bit32bit_findfirst32,_findnext32,_finddata32_tMBCS32bit64bit_findfirst32i64,_findnext32i64,_finddata32i64_tMBCS64bit32bit_findfirst64i32,_fin

3、dnext64i32,_finddata64i32_t1MBCS64bit64bit_findfirst64,_findnext64,_finddata64_tUnicode32bit32bit_wfindfirst32,_wfindnext32,_wfinddata32_tUnicode32bit64bit_wfindfirst32i64,_wfindnext32i64,_wfinddata32i64_t1Unicode64bit32bit_wfindfirst64i32,_wfindnext64i32,_wfinddata64i32_tUnicode64bit64bit_wfindfirs

4、t64,_wfindnext64,_wfinddata64_t_findclose方法只有一種實現(xiàn)。C+同時提供了大量的宏,來保證我們的代碼即使不經(jīng)過修改,也可以適應(yīng)不同的編譯環(huán)境,這些宏全部或部分根據(jù)下面2個編譯環(huán)境來決定最終被替換成哪個函數(shù):在_UNICODE被定義時,使用支持UNICODE的實現(xiàn),在MBCS被定義或2者都沒有被定義時,使用支持MBCS的實現(xiàn)。在USE_32BIT_TIME_T被定義時使用支持32bit時間類型的函數(shù),在其沒有被定義時采用64bit時間類型的函數(shù)。下面列出_findfirst幾種常用的宏:宏不同編譯環(huán)境時對應(yīng)的函數(shù)_findfirst_findfirst32

5、1_tfindfirst_MBCS定義,_USE_32BIT_TIME_T定義時:_MBCS定義,_USE_32BIT_TIME_TNOT定義時:UNICODE定義,_USE_32BIT_TIME_T定義時:UNICODE定義,_USE_32BIT_TIME_TNOT定義時:_findfirst32_findfirst64i32_wfindfirst32_wfindfirst64i32_tfindfirst32_MBCS定義時:UNICODE定義時:_findfirst32_wfindfirst32_tfindfirst64_MBCS定義時:UNICODE定義時:_findfirst64_wf

6、indfirst64為了讓我們的代碼有很好的兼容性,下面我們都采用tfindfirst64宏來講解,_findfirst的其他宏和函數(shù)在用法上與其是一致的。其他用到的函數(shù)也都是宏,保證代碼在多字符集和Unicode字符集下都不需修改即能通過編譯。0函數(shù)用法上面的函數(shù)定義中,都是宏是字符串宏,在多字符集時等于字符集是等于。1._tfindfirst64函數(shù):該函數(shù)用于得到指定路徑filespec下的第一個文件(或者文件夾),filespec支持通配符,例如c:.指查找C盤所有的文件和子目錄。fileinfo由函數(shù)填充后返回,記錄第一個文件(或文件夾)的信息,返回值是一個唯一性搜索句柄,用來傳遞給

7、_tfindnext64查找下一個文件,或者傳遞給_findclose來關(guān)閉該句柄。如果調(diào)用失敗,返回值等于-1.2._tfindnext64函數(shù):該函數(shù)用于搜索下一個文件(或文件夾),參數(shù)handle是之前調(diào)用_tfindfirst64返回的句柄,fileinfo由函數(shù)填充后返回,記錄當(dāng)前文件(或文件夾)的信息,如果查找成功,返回值為0否則為-1.我們一般都采用于循環(huán)不斷調(diào)用_tfindnext64函數(shù)來遍歷當(dāng)前目錄下所有的子目錄和文件,直到返回-1時結(jié)束。3._findclose函數(shù):用于結(jié)束查找時關(guān)閉句柄,參數(shù)handle是之前調(diào)用_tfindfirst64返回的句柄。牛_tfindda

8、ta64_t結(jié)構(gòu)體:我們以_Winddata64_t為例,其有如下定義time_create,time_access,time_write分別指創(chuàng)建時間,最近訪問時間,和最后修改時間name為文件(或文件夾)名稱;attrib描述的文件的系統(tǒng)屬性,它由多個attributes組合而成,在MSDN中描述如下:1_A_ARCHArchive.Setwheneverthefileischanged,andclearedbytheBACKUPcommand.Value:0 x20_A_HIDDENHiddenfile.NotnormallyseenwiththeDIRcommand,unlessthe

9、/AHoptionisused.Returnsinformationaboutnormalfilesaswellasfileswiththisattribute.Value:0 x02_A_NORMALNormal.Filecanbereadorwrittentowithoutrestriction.Value:0 x001_A_RDONLYRead-only.Filecannotbeopenedforwriting,andafilewiththesamenamecannotbecreated.Value:0 x01_A_SUBDIRSubdirectory.Value:0 x10_A_SYS

10、TEMSystemfile.NotnormallyseenwiththeDIRcommand,unlessthe/ASoptionisused.Value:0 x04屬性表示該對象是一個子目錄,我們可以探測這個位是否被設(shè)置來判斷這屬性表示該對象是一個子目錄,我們可以探測這個位是否被設(shè)置來判斷這是一個文件還是文件夾。這樣,我們就可以采用遞歸的辦法,來獲取每個子目錄下的文件信下面的是一段演示代碼,采用遞歸的方法,獲取當(dāng)前目錄和所有子目錄下文件的信息,并把它們的文件屬性打印出來,并把每個文件的全路徑存儲在一個vector結(jié)構(gòu)中。_tcscpy(fullPath,path);_tcscat(fullP

11、ath,_T();_tcscat(fullPath,c_);if(c_file.attrib&_A_SUBDIR)GetAllFileInfo(fullPath,filesPathVector);else/storefullfilepathinvector.filesPathVector.push_back(fullPath);/printfileinfo_tprintf(_T(FileName:%srn),fullPath);_tprintf(_T(ReadOnly:%srn),(c_file.attrib&_A_RDONLY)?_T(Y):_T(N);_tprintf(_

12、T(Hidden:%srn),(c_file.attrib&_A_HIDDEN)?_T(Y):_T(N);_tprintf(_T(System:%srn),(c_file.attrib&_A_SYSTEM)?_T(Y):_T(N);_tprintf(_T(Arch:%srn),(c_file.attrib&_A_ARCH)?_T(Y):_T(N);TCHARtimeBuffer30;_tctime64_s(timeBuffer,_countof(timeBuffer),&c_file.time_write);_tprintf(_T(WriteTime:%.24srnrn),timeBuffer

13、);while(_tfindnext64(hFile,&c_file)=0);/closesearchhandle_findclose(hFile);int_tmain(intargc,_TCHAR*argv)vectorfilesPathVector;打印的結(jié)果:FileName:d:FolderForTesta.txtReadOnly:NHidden:NSystem:NArch:YWriteTime:SunJun0612:21:222010FileName:d:FolderForTestsub1bReadOnly:NHidden:NSystem:NArch:YWriteTime:MonJun0716:33:452010oSHGetFilelnf方法結(jié)構(gòu)體存儲的信息很少,我們可能希望得到更多的文件信息,比如文件的類型,文件的圖標(biāo)等等,這就需要用到函數(shù):這是一個WindowsShell函數(shù),需要

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論