原 VC實現修改檔案建立 訪問 修改時間屬性

2021-06-16 16:45:44 字數 2332 閱讀 9231

最近對vc實現修改檔案建立、訪問、修改時間屬性的方法產生了興趣,我便在網上查了這方面的教程,但是卻總是看不明白,有的不夠簡潔。例如在一些文章中提到了使用findfirstfile()函式和win32_find_data結構,我認為完全沒有必要,因為到最後時我們需要用到setfiletime()函式,而這個函式和findfirstfile()是無關的,我們只需用到systemtime和filetime結構體。如果感興趣的話,你可以先看看微軟的官方幫助和支援文件:filetime 結構使用資訊,裡面講的不僅僅是filetime 結構的使用,很值得一看。

struct _filetime  filetime;

//filetime 結構表示 1601 年 1 月 1 日以來 100 納秒為間隔數。結構包含的這兩個dword值組合在一起

//形成乙個 64 位值的 32 位值。

struct _systemtime systemtime;

標頭檔案:
#include //只需要這乙個

接著定義變數。
filetime filetime;

systemtime systemtime;

接著,設定日期和時間,我們這裡設定成2023年1月1日 01:01:01:

systemtime.wday = 1;

systemtime.wyear = 1999; //記住,一定要大於1601,因為filetime的時間是從2023年1月1日開始的

//如果不大於1601,setfiletime()會返回false,getlasterror()

//返回78 (無效引數)

systemtime.wmonth = 1;

systemtime.whour = 1;

systemtime.wminute =1;

systemtime.wdayofweek = 1;

systemtime.wsecond = 1;

systemtime.wmilliseconds = 1;

轉換systemtime為filetime結構:
systemtimetofiletime( &systemtime, &filetime ); 

由於setfiletime()需要檔案控制代碼,所以只好用createfile()開啟這個檔案(微軟官方例項)
handle hfile = createfile( "c:\\測試.txt",

generic_write, //這個必須有

file_share_read | file_share_write,

null,

open_existing,

0,null );

總算快完成了,但是還有最關鍵的一步(寫入):if (hfile != invalid_handle_value)

注:setfiletime函式
函式原型:
bool setfiletime(   //返回值:true表示成功,false表示失敗

handle hfile, // 檔案控制代碼

const filetime *lpcreationtime, // 檔案建立時間

const filetime *lplastaccesstime, // 最後訪問時間

const filetime *lplastwritetime // 最後修改時間

);

你會問,怎麼是2023年1月1日,9:01:01?我們明明設定的是2023年1月1日,1:01:01啊!這個問題我也糾結了好半天,最後總算找到了答案:時區!

我國標準北京時間是gmt+8:00,所以你只要把時間gmt標準之間就可以了,不過還得再說明一下,如果你調成gmt(格林威治時間)的話,還是會有1小時的誤差,也就是說microsoft windows的檔案時間不是按的gmt(格林威治時間)來計算的。我們只要把時區調成gmt(協調世界時)就可以了。

或者,在程式中這樣修改一下:systemtime.wday = 31;

systemtime.wyear = 1998;

systemtime.wmonth = 12;

systemtime.whour = 17;

systemtime.wminute = 1;

systemtime.wdayofweek = 1;

systemtime.wsecond = 1;

systemtime.wmilliseconds = 1;

就可以了。

修改檔案建立日期,訪問日期和修改日期

有時出於一些同步了或者其他什麼亂七八糟的原因,我們需要修改乙個檔案的建立日期等內容,網上找了一下演算法,記下來以備後用.void cmodifybindlg onbutton1 file info,pfile info 獲取檔案的資訊 win32 find data ffd handle hfind...

windows下更改檔案建立修改訪問時間

在檔案a.c中複製下方 gcc編譯後產生a.exe include include include include intmain int argc,char ar filetime ft,localfiletime systemtimetofiletime spec time,ft localfi...

VC 獲取檔案屬性建立時間 修改時間和訪問時間

win32 find data結構 關於檔案的全部屬性資訊,總計有以下以下9 種 檔案的標題名 檔案的屬性 唯讀 存檔,隱藏等 檔案的建立時間 檔案的最後訪問時間 檔案的最後修改時間 檔案大小的高位雙字 檔案大小的低位雙字 保留 保留。在這裡只有檔案標題名和檔案的長度可以通過cfile模擬較方便的獲...