




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、引言:對(duì)于大多數(shù)的 IT 企業(yè)和絕大多數(shù)的個(gè)人用戶而言,數(shù)據(jù)的備份主要是對(duì)數(shù)據(jù)內(nèi)容的簡(jiǎn) 單備份,而很少涉及對(duì)備份數(shù)據(jù)自身屬性如文件屬性、 所在文件夾的時(shí)間屬性等內(nèi)容的備份。 而在某些對(duì)數(shù)據(jù)管理有著非常嚴(yán)格要求的特殊行業(yè)中, 對(duì)以上這些相關(guān)屬性信息的備份也是 同等重要的。 但是在目前的 Windows 操作系統(tǒng) 下,不論是直接通過手工進(jìn)行數(shù)據(jù)備份還是通 過某些數(shù)據(jù)備份軟件來進(jìn)行, 都難以將這些信息完全保持原貌復(fù)制過來, 尤其對(duì)于每時(shí)每刻 均在發(fā)生變化的時(shí)間屬性更是難以保持其原始信息。 不僅如此, 在 Windows 操作系統(tǒng)下甚至 沒有提供能直接修改此類屬性的工具和手段。 為此, 筆者對(duì)該問題做
2、了研究, 并總結(jié)出一套 比較簡(jiǎn)單的解決辦法。其中,對(duì)于文件屬性的備份與更改方法筆者已在電腦報(bào)天極網(wǎng) 在 V C+下對(duì)文件屬性的獲取與更改一文做了闡述,因此,本文在此就不再加以贅述,而著重對(duì)文件夾時(shí)間屬性的獲取與更改方法進(jìn)行介紹。設(shè)計(jì)思路在Windows操作系統(tǒng)下并沒有提供任何可供修改文件夾時(shí)間屬性的方法和手段,即使是在 Win32 API 函數(shù)中, 也只是提供了對(duì)文件時(shí)間屬性進(jìn)行修改的函數(shù)調(diào)用, 而沒有關(guān)于文件 夾時(shí)間屬性修改的只言片語。雖然Windows所提供的備份程序能夠把待備份文件夾下的所有子文件夾的時(shí)間屬性按照原樣完整的復(fù)制過去, 但是卻無法保持根目錄時(shí)間屬性的恒定。 由 此,可以考慮
3、采取備份的方式來進(jìn)行,并從同備份相關(guān)的 Win32 API 函數(shù)入手。具體而言, 可以先以打開文件的方式來打開文件夾, 然后就可以通過原本用于處理文件時(shí)間屬性的 Win 32 API 函數(shù) GetFileTime() 和 SetFileTime() 來獲取原始時(shí)間屬性并以其為參數(shù)來設(shè)置備份 后的文件夾時(shí)間屬性了,這樣的處理可以確保文件夾在備份前后時(shí)間屬性的一致。根據(jù)前面的分析可以看出,按照打開文件的方式來打開文件夾是整個(gè)處理過程的關(guān)鍵,通常主要用于創(chuàng)建、打開文件的Win32 API函數(shù)CreateFile() 并非只能用來創(chuàng)建和打開文件對(duì)象,實(shí)際上它還可以用來創(chuàng)建、打開管道、郵槽、通訊資源、磁
4、盤驅(qū)動(dòng)器(只對(duì) Wind。ws NT而言)、控制臺(tái)和文件夾(只能打開)等。下面給出CreateFile()的原型:HANDLE CreateFile( LPCTSTR IpFileName, /文件名指針DWORD dwDesired Access , / 訪問模式DWORD dwShareMode, /共享模式LPSECURITY_ATTRIBUTES IpSecurityAttributes, /安全屬性DWORD dwCreationDisposition, /創(chuàng)建方式DWORD dwFlagsAndAttributes, /文件屬性HANDLE hTemplateFile /指向待復(fù)制
5、屬性的文件指針);當(dāng)用其進(jìn)行文件夾打開操作時(shí),第一個(gè)參數(shù)lpFileName應(yīng)被設(shè)置成為待打開的文件夾的名稱;至于訪問模式可以根據(jù)需要靈活設(shè)置,對(duì)于本文而言,對(duì)源文件夾只進(jìn)行讀取操作故可以設(shè)置為GENERIC_READ寸于備份后的文件夾由于需要將屬性信息寫入,因此需要有GENERIC_WRIT 的支持;共享模式參數(shù) dwShareMode的設(shè)置與進(jìn)行文件處理時(shí)的設(shè)置沒有什 么區(qū)別,在此可以設(shè)置為 FILE_SHARE_READ|FILE_SHARE_DELET由于CreateFile() 函數(shù)在 進(jìn)行文件夾操作時(shí),不能以創(chuàng)建方式進(jìn)行,因此創(chuàng)建方式只能打開已經(jīng)存在的對(duì)象,即dwCreationD
6、isposition應(yīng)當(dāng)設(shè)置為 OPEN_EXISTING 相比而言,dwFlagsAndAttributes參數(shù)的設(shè)置是比較重要的,正是通過將該參數(shù)設(shè)置為 FILE_FLAG_BACKUP_SEMANTI屬性才使Cr eateFile()函數(shù)來進(jìn)行打開文件夾的操作。通常,文件、文件夾的時(shí)間屬性指的是創(chuàng)建時(shí)間、最近訪問時(shí)間和最近修改時(shí)間等幾個(gè)具體屬性。對(duì)于文件的上述屬性可以通過GetFileTime()來獲取,對(duì)于文件夾,在通過CreateFile()函數(shù)將其打開后,其獲取得到的句柄可以當(dāng)作文件句柄來使用。因此,通過GetFileTime()函數(shù)同樣也可以得到文件夾的時(shí)間屬性。GetFileT
7、ime()函數(shù)原型如下:BOOL GetFileTime( HANDLE hFile, /文件句柄LPFILETIME lpCreationTime, /創(chuàng)建時(shí)間的地址最近訪問時(shí)間的地址最近修改時(shí)間的地址LPFILETIME IpLastAccessTime, /LPFILETIME IpLastWriteTime /);其中后三個(gè)參數(shù)均是指向FILETIME結(jié)構(gòu)的指針,得到的也都是UTC時(shí)間,如果需要,可以通過FileTimeToLocalFileTime() 函數(shù)將此UTC時(shí)間轉(zhuǎn)化成本地時(shí)間。而且還可以進(jìn)- 步通過FileTimeToSystemTime()函數(shù)將其從文件時(shí)間格式轉(zhuǎn)化成系統(tǒng)
8、時(shí)間格式,轉(zhuǎn)化后的 時(shí)間格式將保存在一個(gè)SYSTEMTIM結(jié)構(gòu)對(duì)象中。類似的,在將時(shí)間信息寫入到文件夾屬性時(shí),如果不是文件時(shí)間格式也應(yīng)當(dāng)通過SystemTimeToFileTime()函數(shù)將其從系統(tǒng)時(shí)間格式轉(zhuǎn)換成文件時(shí)間格式,然后再通過SetFileTime()函數(shù)將指定的時(shí)間寫入到文件夾的時(shí)間屬性中去。這樣,在進(jìn)行數(shù)據(jù)備份和恢復(fù)的過程中,包括根目錄在內(nèi)的所有文件夾都可以保持時(shí)間屬性的一致。簡(jiǎn)單示例下面根據(jù)前面的講述而給出一個(gè)簡(jiǎn)單的應(yīng)用示例,通過此示例可以從指定的文件夾讀取時(shí)間屬性信息并可在經(jīng)過修改后再回寫進(jìn)去(在此僅對(duì)最近修改時(shí)間進(jìn)行處理,對(duì)于其他的時(shí)間屬性可用類似的方法加以實(shí)現(xiàn))。這里通過
9、兩個(gè)函數(shù)GetDirTime()和SetDirTime()來實(shí)現(xiàn)對(duì)文件夾時(shí)間信息的獲取與更改處理,下面就以注釋的形式對(duì)這兩個(gè)函數(shù)的實(shí)現(xiàn)過程進(jìn)行講解:/獲取指定文件夾的時(shí)間屬性,入口參數(shù)DirName指定了待處理的文件夾,stime 為一/ 指向SYSTEMTIME結(jié)構(gòu)的指針BOOL CSetForderTimeDlg:GetDirTime(CString DirName, SYSTEMTIME & stime)/ 打開文件夾HANDLE hDir = CreateFile (DirName, GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_DELETE,
10、NULL, OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS, NULL);FILETIME lpCreationTime; /文件夾的創(chuàng)建時(shí)間FILETIME lpLast Access Time; /對(duì)文件夾的最近訪問時(shí)間FILETIME lpLastWriteTime; /文件夾的最近修改時(shí)間/獲取文件夾時(shí)間屬性信息if (GetFileTime(hDir, &lpCreationTime, &lpLastAccessTime,& lpLastWriteTime)FILETIME ftime;轉(zhuǎn)換成系統(tǒng)時(shí)間格式FileTimeToL
11、ocalFileTime( & IpLastWriteTime, &ftime); /轉(zhuǎn)換成本地時(shí)間FileTimeToSystemTime(&ftime, &stime); /CloseHandle(hDir); /關(guān)閉打開過的文件夾return retval;/設(shè)置指定文件夾的時(shí)間屬性,入口參數(shù)DirName指定了待處理的文件夾,new_time/ 為一指向SYSTEMTIME結(jié)構(gòu)的指針BOOL CSetForderTimeDlg:SetDirTime(CStringDirName, SYSTEMTIME new_stime)/ 打開目錄的Win32 API
12、 調(diào)用HANDLE hDir = CreateFile(DirName, GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_DELETE,NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);FILETIME lpCreationTime; /文件夾的創(chuàng)建時(shí)間FILETIME lpLastAccessTime; /對(duì)文件夾的最近訪問時(shí)間FILETIME lpLastWriteTime; /對(duì)文件夾的最近修改時(shí)間SystemTimeToFileTime(&new_stime,
13、 & lpCreationTime); /轉(zhuǎn)換成文件時(shí)間格式SystemTimeToFileTime(&new_stime, &lpLastAccessTime);SystemTimeToFileTime(&new_stime, &lpLastWriteTime);/設(shè)置文件夾的時(shí)間屬性BOOL retval = SetFileTime(hDir, & lpCreationTime, & lpLastAccessTime,& lpLastWriteTime);CloseHandle(hDir); /關(guān)閉文件夾return retval;至此,可以很方便的通過調(diào)用GetDirTime()和SetDirTime()函數(shù)來實(shí)現(xiàn)對(duì)任意指定文件夾時(shí)間屬性的獲取與設(shè)置,具體為:SYSTEMTIME stime; /系統(tǒng)時(shí)間結(jié)構(gòu)對(duì)象if (GetDirTime(m_Path, stime)/如果獲取文件夾時(shí)間屬性成功,獲取到的時(shí)間信息將保存在stime結(jié)構(gòu)對(duì)象中/如果需要可以對(duì)獲取到的時(shí)間屬性進(jìn)行修改,也可以保留不變/將修改后的時(shí)間屬性回寫到文件夾SetDirTime(m_Path, stime);小結(jié)C
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 藝術(shù)大師深度剖析
- 認(rèn)識(shí)論新挑戰(zhàn)
- 表彰大會(huì)領(lǐng)導(dǎo)發(fā)言稿
- 2025年增壓輸送系統(tǒng)項(xiàng)目發(fā)展計(jì)劃
- 外語跨學(xué)科教學(xué)的教學(xué)方法與策略
- 員工固定期合同范本
- 商業(yè)協(xié)商合同范本
- 辦公商用樓租賃合同范例
- 合作建設(shè)協(xié)議合同范本
- 上海消防檢測(cè)合同范本
- 第十四屆全國(guó)交通運(yùn)輸行業(yè)職業(yè)技能競(jìng)賽(公路收費(fèi)及監(jiān)控員)賽項(xiàng)題庫-上(單選題匯總-共3部分-1)
- NBT 10664-2021 核電廠工程巖土試驗(yàn)規(guī)程
- 中醫(yī)藥膳學(xué)(中篇-藥膳原料)共66張課件
- 醫(yī)院產(chǎn)前篩查中心設(shè)置評(píng)審驗(yàn)收工作匯報(bào)課件
- 公司生產(chǎn)進(jìn)度表
- 2019年遠(yuǎn)程開具電子處方管理制度及操作規(guī)程版
- 倪海廈人紀(jì)之針灸 全
- 房室結(jié)雙徑路傳導(dǎo)的基本電生理特征與常見心電圖表現(xiàn)分析課件
- 《傳統(tǒng)功法-八段錦》教學(xué)大綱
- 溶血性貧血護(hù)理
- 逆向思維-PPT課件(PPT 43頁)
評(píng)論
0/150
提交評(píng)論