




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、.Windows平臺有一個WIN32_FIND_DATA結(jié)構(gòu),用來存儲文件的一些屬性(這里指的屬性和下面結(jié)構(gòu)中文件屬性成員不同。這里的屬性是指下面結(jié)構(gòu)的所有成員)。該結(jié)構(gòu)的定義如下。typedef struct _WIN32_FIND_DATA DWORD dwFileAttributes; /文件屬性 FILETIME ftCreationTime; / 文件創(chuàng)建時間 FILETIME ftLastAccessTime; / 文件最后一次訪問時間 FILETIME ftLastWriteTime; / 文件最后一次修改時間 DWORD nFileSizeHigh; / 文件長度高32位 DW
2、ORD nFileSizeLow; / 文件長度低32位 DWORD dwReserved0; / 系統(tǒng)保留 DWORD dwReserved1; / 系統(tǒng)保留 TCHAR cFileName MAX_PATH ; / 長文件名 TCHAR cAlternateFileName 14 ; / 8.3格式文件名 WIN32_FIND_DATA, *PWIN32_FIND_DATA;可以使用FindFirstFile() 和 FindNextFile() 函數(shù)可以得到 文件(包括文件夾)的WIN32_FIND_DATA結(jié)構(gòu)信息。FindFirstFile的原型如下:FindFirstFile()函
3、數(shù)中,第一個參數(shù)是一個字符串??梢允且粋€路徑名或者文件名,并且支持通配符 * 和 ?。比如想查找D盤下的所有文件,可以寫成D:*.* 或者 D:*。如果只想查找D盤下的txt文件,那么可以寫成D:*.txt。 第二個參數(shù)是指向WIN32_FIND_DATA結(jié)構(gòu)體的一個指針。正如函數(shù)的名字FindFirstFile那樣, 該函數(shù)會查找第一個符合查找條件的文件(使用通配符可以有多少文件滿足查找條件)。然后把這個文件的一些信息寫入這個結(jié)構(gòu)里面。如果第一個參數(shù)沒有使用通配符,而是一個文件名,那么將只能找到一個符合條件的文件。函數(shù)的返回值是一個句柄HANDLE,說白了也就是一個整型。這個返回值可以用來查
4、找下一個符合查找條件的文件。這就是下面的FindNextFile函數(shù)了。如果函數(shù)調(diào)用失敗,將返回INVALID_HANDLE_VALUEFindNextFile的原型如下第一個參數(shù)就是FindFirstFile函數(shù)的返回值。第二個參數(shù)和FindFirstFile一樣,在一個指針,用來存放被查找到的文件的一些信息。如果查找成功,函數(shù)返回非0值。否則返回0??梢哉{(diào)用GetLastError()函數(shù)來查看失敗原因。如果沒有符合要求的文件了,那么也將返回0。此時,調(diào)用GetLastError()函數(shù)將返回ERROR_NO_MORE_FILES。在使用完上面兩個函數(shù)后,要記得使用CloseFile(HA
5、NDLE hFindFile)函數(shù)來關(guān)閉這個句柄。上面三個函數(shù)需要包括windows.h頭文件.說了這么多,下面給出一個例子代碼。#include<iostream>#include<windows.h>using namespace std;int main()WIN32_FIND_DATA fileAttr;HANDLE handle;handle = FindFirstFile("D:*", &fileAttr);if( handle = INVALID_HANDLE_VALUE ) cout<<"invalid
6、handle value "<<GetLastError()<<endl;elsecout<<fileAttr.cFileName<<endl; /輸出查找到的文件名while( FindNextFile(handle, &fileAttr) )cout<<fileAttr.cFileName<<endl; /輸出每一個查找到的文件名if( GetLastError() = ERROR_NO_MORE_FILES )cout<<"查找完畢"<<endl;else
7、 cout<<"查找過程出現(xiàn)錯誤"<<endl;FindClose(handle);return 0;現(xiàn)在看一下WIN32_FIND_DATA結(jié)構(gòu)的一些成員信息。首先看一下文件的大小信息。該信息用了兩個成員存儲。分別是:DWORD nFileSizeHigh; / 文件長度高32位 DWORD nFileSizeLow; / 文件長度低32位其中,單位是 字節(jié)數(shù)。由于nFileSizeHigh存儲的是文件長度的高位,所以當(dāng)文件的大小小于MAXDWORD時,該成員的值為0。最后,可以用 (nFileSizeHigh * (MAXDWORD+1) + n
8、FileSizeLow 來計算文件大小。文件夾的大小是 0 ?,F(xiàn)在看一下與文件有關(guān)的時間屬性。有三個時間,創(chuàng)建時間、訪問時間、修改時間。三者都差不多。只需弄懂一個,其他兩個就自然知道怎么用了。從文章最前面的WIN32_FIND_DATA結(jié)構(gòu)體可以看到其ftCreationTime 成員是一個FILETIME類型。聲明如下:一眼看過去,都不知道怎么使用。就像C語言標(biāo)準(zhǔn)庫里面的time()函數(shù)一樣,返回一個從1970年到現(xiàn)在的秒數(shù)。這個值很難使用。還好Windows還提供了另外一個結(jié)構(gòu) SYSTEMTIME。其聲明如下:這個結(jié)構(gòu)看起來就有點像人使用的,剛才那個完全是機器使用的。同樣,Windows
9、提供了兩者相互轉(zhuǎn)換的函數(shù).兩個函數(shù)都需要對應(yīng)結(jié)構(gòu)體的指針。還有一個東西需要注意。通過FindFirstFile、FindNextFile獲取的WIN32_FIND_DATA結(jié)構(gòu)。其FILETIME成員的值都是使用UTC時間,就是中學(xué)地理學(xué)的格林尼治時間。我們中國用東8區(qū)時間。所以我們還要在這些成員值的基礎(chǔ)上加上 8 小時。微軟不推薦我們直接對FILETIME結(jié)構(gòu)進行 加上 或者減少 某個時間。如果我們要轉(zhuǎn)換成我們當(dāng)?shù)氐臅r間(就是從UTC時間轉(zhuǎn)換成東8區(qū)時間),可以使用函數(shù) FileTimeToLocalFileTime。其聲明如下:另外,不能就地修改。就是說,第一個參數(shù)和第二個參數(shù)要指向不同的
10、內(nèi)存。給一個例子吧。#include<iostream>#include<windows.h>using namespace std;ostream& operator << (ostream& os, const SYSTEMTIME& t)os<<t.wYear<<"-"<<t.wMonth<<"-"<<t.wDay<<" "os<<t.wHour<<": "
11、;<<t.wMinute<<": "<<t.wSecond<<endl;return os;int main()WIN32_FIND_DATA fileAttr;HANDLE handle;SYSTEMTIME sysTime;FILETIME localFileTime;handle = FindFirstFile("D:*.txt", &fileAttr);if( handle = INVALID_HANDLE_VALUE )cout<<"invalid handle value "<<GetLastError()<<endl;elsecout<<fileAttr.cFileName<<" size is "<<(fileAttr.nFileSizeHigh * (MAXDWORD+1) + fileAttr.nFileSizeLow) <<endl;FileTimeToLocalFileTime(&a
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年微波和高頻波解凍設(shè)備合作協(xié)議書
- 環(huán)境綠化與公共設(shè)施管理合作協(xié)議細(xì)節(jié)
- 農(nóng)田灌溉系統(tǒng)安裝與維護服務(wù)合同
- 網(wǎng)絡(luò)廣告行業(yè)精準(zhǔn)投放與廣告優(yōu)化策略方案
- 行政管理中的市政學(xué)課題研究試題及答案
- 小區(qū)智能化設(shè)備維護協(xié)議
- 2025年照相及電影洗印設(shè)備項目建議書
- 酒店租賃運營管理合作協(xié)議
- 農(nóng)業(yè)生物技術(shù)聯(lián)合開發(fā)協(xié)議
- 社交網(wǎng)絡(luò)行業(yè)社交平臺建設(shè)與運營策略方案
- 《城市綜合防災(zāi)規(guī)劃》教學(xué)大綱
- 居家環(huán)境安全評估量表-Microsoft-Word-文檔
- SimMarketing營銷模擬實驗室操作篇
- 閥門螺栓使用對照表
- 電診斷在康復(fù)醫(yī)學(xué)中的應(yīng)用ppt課件
- HDPE塑料檢查井施工工藝
- 新人教版二年級下冊數(shù)學(xué)第七單元《練習(xí)十七》教學(xué)課件
- 小學(xué)生個人簡歷表
- 股東會授權(quán)委托書
- 2021年河北中考理科綜合真題及答案
- 畢業(yè)設(shè)計工程機械液壓系統(tǒng)及其維護與保養(yǎng)
評論
0/150
提交評論