每天進步一點點 WIN32 FIND DATA

2021-06-08 05:02:52 字數 2934 閱讀 3025

關於檔案的全部屬性資訊。總計有以下以下9種:檔案的標題名、檔案的屬性(

唯讀、存檔,隱藏等)、檔案的建立時間、檔案的最後訪問時間、檔案的最後修改時間、檔案大小的高位雙字、檔案大小的低位雙字、保留、保留。在這裡只有檔案標題名和檔案的長度可以通過cfile模擬較方便的獲得,而對於其他幾種屬性的獲取和設定就無能為力了。

在用findfirst()和findnext()函式去查詢磁碟檔案時經常使用的乙個資料結構win32_find_data的成員變數裡包含了以上所有的檔案屬性,因此可以通過這個結構作為獲取和更改檔案屬性的手段。該結構的內容如下:

typedef struct _win32_find_data  win32_find_data, *pwin32_find_data;

可以通過findfirstfile()函式根據當前的檔案存放路徑查詢該檔案來把待操作檔案的相關屬性讀取到win32_find_data結構中去:

win32_find_data ffd ;

handle hfind = findfirstfile("c:\\test.dat",&ffd);

在使用這個結構時不能手工修改這個結構中的任何資料,結構對於開發人員來說只能作為乙個唯讀資料,其所有的成員變數都會由系統完成填寫。在msdn幫助中可以查詢到關於win32_find_data結構的更加詳細的說明。

三、 檔案屬性資訊的獲取與更改

為了更好的儲存獲取到的檔案屬性資訊,對應於檔案屬性構造乙個自定義的file_info資料結構,獲取的屬性資訊可暫存於此:

typedef struct _file_info  file_info, * pfile_info;

首先用findfirstfile()函式將檔案屬性獲取到win32_find_data 結構物件findfiledata中去,之後可以用findclose()將其關閉,並把findfiledata中的有關檔案屬性資訊的內容複製到自定義結構file_info的結構物件fileinfo中備用。下面是關於這部分描述的部分關鍵**:

//宣告結構物件

file_info fileinfo;

win32_find_data findfiledata;

…… //獲取檔案屬性資訊

findclose(findfirstfile("test.txt",&findfiledata));

memset(&fileinfo,0,sizeof(file_info));

…… //將檔案屬性資訊儲存到fileinfo中備用

strcpy(fileinfo.szfiletitle,myfile.getfiletitle());

fileinfo.dwfileattributes = findfiledata.dwfileattributes;

fileinfo.ftcreationtime = findfiledata.ftcreationtime;

fileinfo.ftlastaccesstime = findfiledata.ftlastaccesstime;

fileinfo.ftlastwritetime = findfiledata.ftlastwritetime;

fileinfo.nfilesizehigh = findfiledata.nfilesizehigh;

fileinfo.nfilesizelow = findfiledata.nfilesizelow;

…… 在獲取到檔案的原始屬性資訊後既可以原封不動的將屬性重新寫到檔案,也可以對其中某一項或某幾項屬性內容進行修改後再行寫入檔案,從而達到更改檔案屬性的目的。比如可以用setfiletime()函式設定檔案的建立時間、最近一次訪問時間以及最近一次修改的時間等等:

setfiletime((handle)destfile.m_hfile, //待寫入的檔案控制代碼

&fileinfo.ftcreationtime, //檔案的建立時間

&fileinfo.ftlastaccesstime, //檔案最近一次的訪問時間

&fileinfo.ftlastwritetime); //檔案最近一次的修改時間

也可以用

setfileattributes() 函式實現對檔案屬性的修改:

setfileattributes(fileinfo.szfiletitle,fileinfo.dwfileattributes);

至於檔名的修改則更加簡單,直接在建立檔案時在createfile()或cfile類的成員函式open裡直接對檔名引數進行設定即可。

移動乙個檔案,一般可使用:

bool winapi movefile(lpcstr existing, lpcstr target);

其中 existing是現有檔案或目錄,target是目標檔案或目錄。此函式還可以用來對檔案改名。例:

movefile("d:\\temp\\a.txt", "e:\\mypath\\b.txt"); 將d:\temp\a.txt移動到e:\mypath並改名為b.txt

>api中的copyfile:

bool winapi copyfile(lpcstr oldfilename, lpcstr newfilename, bool failifexists);

oldfilename: 源檔名;

newfilename: 目標檔名;

failifexists: 目標檔案已存在時的處理辦法。true則不覆蓋並返回失敗標記,false則覆蓋。

返回值:true代表成功,false代表失敗。

>貼上又是哪個函式呢?

貼上的功能不是乙個函式能夠實現的.對剪貼簿的操作windows有一系列函式.貼上必須要用的是 openclipboard(), getcipboarddata()和closeclipboard().

拷貝-貼上的物件為文字或其他二進資料(如影象)時可能還要輔助其他的api.

每天進步一點點

很多朋友總喜歡問 成功靠什麼?其實,成功很難單一的歸納為靠什麼條件,如果一定要回答,只能從某種意義上說 很多人的成功就是靠他們每天比別人 多做一點點 正如古人有云 業精於勤,荒於嬉。這裡所說的勤,也就是比別人多做一點點,即付出多一點的勞動和努力。不要小看這一點點,又如古語說 集腋成裘,積沙成丘。如果...

每天進步一點點

在模組化程式設計時,在子模組中宣告變數 例如unsigned char aa 不需要在標頭檔案中宣告 要在主函式中呼叫,要寫成 extern unsigned char aa 而不能寫成 extern aa 寫成extern aa 則無法改變aa的值。2014年9月22日 21 12 00 品質因數...

每天進步一點點(一)

最近接了第乙個商業專案,一人獨立完成從前台到後台,做了有幾天的時間,每天進步一點點,把每天看到的學到的記錄下來,以後也堅持。後台繼續用自己的extjs老本行,因為相比其他js庫,extjs用的比較熟,現成的 也有所以開發起來也比較容易,今天學到了兩個ext的新東西。一 ext和後台進行互動大部分用的...