VC文件夾時(shí)間屬性的獲取與更改_第1頁
VC文件夾時(shí)間屬性的獲取與更改_第2頁
VC文件夾時(shí)間屬性的獲取與更改_第3頁
VC文件夾時(shí)間屬性的獲取與更改_第4頁
VC文件夾時(shí)間屬性的獲取與更改_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論