日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
網(wǎng)絡(luò)安全編程:文件相關(guān)操作API函數(shù)

剛開(kāi)始接觸編程可能會(huì)覺(jué)得Windows API是一個(gè)很神奇、很萬(wàn)能的工具,Windows API是Windows下開(kāi)發(fā)應(yīng)用程序的基礎(chǔ)知識(shí),不過(guò)基礎(chǔ)并不代表簡(jiǎn)單,能掌握好Windows API來(lái)開(kāi)發(fā)程序也是非常不容易的。

網(wǎng)站建設(shè)公司,為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制網(wǎng)站建設(shè)服務(wù),專(zhuān)注于企業(yè)網(wǎng)站制作,高端網(wǎng)頁(yè)制作,對(duì)成都戶(hù)外休閑椅等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。專(zhuān)業(yè)網(wǎng)站設(shè)計(jì),網(wǎng)站優(yōu)化推廣哪家好,專(zhuān)業(yè)成都網(wǎng)站營(yíng)銷(xiāo)優(yōu)化,H5建站,響應(yīng)式網(wǎng)站。

在Windows下,文件有很多種,比如圖片文件、視頻文件、音頻文件……這些文件都屬于保存在磁盤(pán)上的存儲(chǔ)格式不相同的文件。除了常見(jiàn)的磁盤(pán)文件格式外,管道、郵槽,甚至是設(shè)備對(duì)象,在Windows下也都被當(dāng)作文件來(lái)對(duì)待。這樣在編程的過(guò)程中,操作管道、郵槽、設(shè)備對(duì)象就如同操作文件一樣。

1. 文件的打開(kāi)與關(guān)閉

要對(duì)文件進(jìn)行操作,首先把要操作的文件打開(kāi),文件打開(kāi)成功后會(huì)返回一個(gè)可以用于操作文件的句柄,通過(guò)這個(gè)句柄就可以對(duì)文件進(jìn)行讀寫(xiě)操作了。

打開(kāi)文件的API函數(shù)定義如下:

 
 
  1. HANDLE CreateFile(  
  2.  LPCTSTR lpFileName,  
  3.  DWORD dwDesiredAccess,  
  4.  DWORD dwShareMode,  
  5.  LPSECURITY_ATTRIBUTES lpSecurityAttributes,  
  6.  DWORD dwCreationDisposition,  
  7.  DWORD dwFlagsAndAttributes,  
  8.  HANDLE hTemplateFile  
  9. ); 

參數(shù)說(shuō)明如下:

lpFileName:欲打開(kāi)或創(chuàng)建的文件名,這里也可以不是文件名,可以是設(shè)備對(duì)象之類(lèi)的被視為文件的相關(guān)對(duì)象。

dwDesiredAccess:對(duì)文件的訪問(wèn)模式,它指定了要對(duì)打開(kāi)的對(duì)象進(jìn)行何種操作。通常是 GENERIC_READ 和 GENERIC_WRITE,分別表示只讀模式和只寫(xiě)模式;還可以通過(guò)按位或運(yùn)算符同時(shí)指定兩種模式,如 GENERIC_READ | GENERIC_WRITE。

dwShareMode:打開(kāi)文件的共享模式,表示文件被打開(kāi)后是否允許其他進(jìn)程進(jìn)行操作,如果可以進(jìn)行操作,可以指定其操作的模式。

lpSecurityAttributes:該參數(shù)表示安全屬性,通過(guò)這個(gè)參數(shù)可以指定返回的文件句柄是否可以被子進(jìn)程繼承,如果參數(shù)設(shè)置為 NULL,表明無(wú)法被繼承,否則需要將參數(shù)指向一個(gè) SECURITY_ATTRIBUTES 的結(jié)構(gòu)體。該參數(shù)通常為 NULL。

dwCreationDisposition:在創(chuàng)建或打開(kāi)的文件存在或不存在時(shí)該函數(shù)的處理方式。

dwFlagsAndAttributes:該參數(shù)用來(lái)指定新建文件的屬性和對(duì)文件操作的方式。

hTemplateFile:文件模板句柄,系統(tǒng)會(huì)復(fù)制該文件模板的所有屬性到當(dāng)前創(chuàng)建的文件中。

該函數(shù)若執(zhí)行成功,則返回一個(gè)文件句柄;如果執(zhí)行失敗,則返回INVALID_HANDLE_ VALUE。具體失敗的原因可以通過(guò)調(diào)用GetLastError()函數(shù)來(lái)得到。

文件的打開(kāi)操作調(diào)用的是CreateFile()函數(shù),該函數(shù)名不像其名字那樣只能用于創(chuàng)建文件。CreateFile()函數(shù)既可以打開(kāi)文件,也可以創(chuàng)建文件。在Windows下有一個(gè)OpenFile()函數(shù)用來(lái)打開(kāi)文件,不過(guò)它是Win16的產(chǎn)物,在Win32下必須使用CreateFile()來(lái)打開(kāi)文件。

CreateFile()的參數(shù)很多,不過(guò)用習(xí)慣后會(huì)發(fā)現(xiàn)常用的參數(shù)都很容易記住,甚至有些參數(shù)常用的就是那么一兩個(gè)。在對(duì)文件操作完成后,需要對(duì)打開(kāi)文件的句柄進(jìn)行關(guān)閉以釋放資源。關(guān)閉對(duì)象句柄的函數(shù)非常簡(jiǎn)單,而且使用也非常廣泛。該函數(shù)的定義如下:

 
 
  1. BOOL CloseHandle(  
  2.  HANDLE hObject // handle to object  
  3. ); 

該函數(shù)的參數(shù)只有一個(gè),這個(gè)參數(shù)就是調(diào)用CreateFile()函數(shù)時(shí)的返回值,也就是文件句柄。該函數(shù)并不僅僅能夠關(guān)閉文件句柄,事件句柄、進(jìn)程句柄、線程句柄等一系列對(duì)象句柄都可以用該函數(shù)進(jìn)行關(guān)閉。

2. 文件的操作

文件的操作有4種,分別是“增、刪、改、查”。接觸過(guò)數(shù)據(jù)庫(kù)的讀者一定感覺(jué)這些操作都是針對(duì)數(shù)據(jù)庫(kù)的,怎么對(duì)文件的操作也是這4種呢?其實(shí),不單單是對(duì)文件的操作存在增、刪、改、查,對(duì)注冊(cè)表、系統(tǒng)服務(wù)、進(jìn)程等的操作也都存在增、刪、改、查。只不過(guò)相對(duì)應(yīng)的有不同的Windows API函數(shù),而不是使用數(shù)據(jù)庫(kù)的SQL語(yǔ)句而已。

用文件的操作進(jìn)行舉例說(shuō)明。文件的“增”操作可以理解為創(chuàng)建文件,文件的“刪”操作可以理解為刪除文件,文件的“改”操作可以理解為對(duì)文件的寫(xiě)操作,文件的“查”操作可以理解為對(duì)文件的“讀”操作。

對(duì)于文件的讀寫(xiě)操作可以從狹義和廣義上進(jìn)行認(rèn)識(shí),狹義的“讀文件”就是讀取已打開(kāi)文件的內(nèi)容或數(shù)據(jù),而廣義的“讀文件”則可以是獲取文件的大小、創(chuàng)建時(shí)間和修改時(shí)間等,因?yàn)槲募拇笮 ?chuàng)建時(shí)間、修改時(shí)間也屬于文件的屬性,只是這些屬性不保存在本身的文件中。寫(xiě)操作也是同樣的道理。

下面介紹常用的文件的刪除操作、讀寫(xiě)操作所涉及的API函數(shù),具體的更多涉及文件操作的函數(shù)無(wú)法一一介紹,靠大家自行積累總結(jié)。

刪除文件的API函數(shù)定義如下:

 
 
  1. BOOL DeleteFile(  
  2.  LPCTSTR lpFileName  
  3. ); 

該函數(shù)的參數(shù)只有一個(gè),lpFileName表示要?jiǎng)h除的文件的文件名。大部分的文件操作函數(shù)都是通過(guò)CreateFile()函數(shù)返回的文件句柄進(jìn)行操作,而DeleteFile()函數(shù)使用的文件名進(jìn)行操作的,如果文件被打開(kāi)以后,又怎么能刪除呢?

讀取文件內(nèi)容的函數(shù)如下:

 
 
  1. HANDLE hFile,  
  2. LPVOID lpBuffer,  
  3. DWORD nNumberOfBytesToRead,  
  4. LPDWORD lpNumberOfBytesRead,  
  5. LPOVERLAPPED lpOverlapped  

參數(shù)說(shuō)明如下。

hFile:文件句柄,通常是 CreateFile()函數(shù)返回的句柄。

lpBuffer:指向一個(gè)緩沖區(qū),函數(shù)會(huì)將從文件中讀出的數(shù)據(jù)保存在該緩沖區(qū)中。

nNumberOfBytesToRead:要求讀入的字節(jié)數(shù),通常情況下是緩沖區(qū)的大小。

lpNumberOfBytesRead:指向一個(gè) DWORD 類(lèi)型的變量,用于返回實(shí)際讀入的字節(jié)數(shù)。

lpOverlapped:一般設(shè)置為 NULL。

寫(xiě)入文件內(nèi)容的函數(shù)如下:

 
 
  1. BOOL WriteFile(  
  2.  HANDLE hFile,  
  3.  LPCVOID lpBuffer,  
  4.  DWORD nNumberOfBytesToWrite,  
  5.  LPDWORD lpNumberOfBytesWritten,  
  6.  LPOVERLAPPED lpOverlapped  
  7. ); 

WriteFile()函數(shù)的參數(shù)和ReadFile()函數(shù)的參數(shù)意義基本相同,所不同的是第2個(gè)參數(shù)。第2個(gè)參數(shù)仍然指向一個(gè)緩沖區(qū),WriteFile()函數(shù)會(huì)將該緩沖區(qū)的內(nèi)容進(jìn)行寫(xiě)入。當(dāng)用WriteFile()函數(shù)寫(xiě)文件時(shí),寫(xiě)入的數(shù)據(jù)通常被Windows暫時(shí)保存在內(nèi)部的高速緩存中,操作系統(tǒng)會(huì)定期進(jìn)行盤(pán)寫(xiě)入,從而避免頻繁進(jìn)行I/O操作影響執(zhí)行效率。為了保證數(shù)據(jù)即時(shí)寫(xiě)入可以使用FlushFileBuffers()函數(shù),該函數(shù)的定義如下:

 
 
  1. BOOL FlushFileBuffers(  
  2.  HANDLE hFile  
  3. ); 

該函數(shù)會(huì)將指定文件句柄的緩沖區(qū)進(jìn)行清空,使得Windows將緩沖區(qū)中的文件寫(xiě)入磁盤(pán)。該函數(shù)只有一個(gè)參數(shù),即文件句柄。該文件句柄與ReadFile()和WriteFile()所使用的文件句柄相同。

在進(jìn)行文件讀寫(xiě)時(shí),往往并不是由前往后順序讀寫(xiě),通常是根據(jù)需要讀寫(xiě)文件的某個(gè)部分,這就需要對(duì)文件指針進(jìn)行移動(dòng),從而正確對(duì)文件進(jìn)行讀寫(xiě)操作。移動(dòng)文件指針的函數(shù)定義如下:

 
 
  1. DWORD SetFilePointer(  
  2.  HANDLE hFile,  
  3.  LONG lDistanceToMove,  
  4.  PLONG lpDistanceToMoveHigh,  
  5.  DWORD dwMoveMethod  
  6. ); 

該函數(shù)的參數(shù)說(shuō)明如下。

hFile:進(jìn)行文件操作時(shí)的文件句柄,如同 ReadFile()和 WriteFile()。

lDistanceToMove:指定要移動(dòng)文件指針的距離。

lpDistanceToMoveHigh:一個(gè)指向 LONG 型的指針,移動(dòng)距離的高 32 位,一般為 NULL。

dwMoveMethod:指定移動(dòng)的起始位置??梢詮奈募_(kāi)始位置進(jìn)行移動(dòng)(FILE_BEGIN),可以從當(dāng)前文件位置開(kāi)始移動(dòng)(FILE_CURRENT),也可以從文件的末尾開(kāi)始移動(dòng)(FILE_END)。

3. 驅(qū)動(dòng)器及目錄相關(guān)操作

下面介紹目錄相關(guān)的操作,主要介紹4個(gè)相關(guān)函數(shù),分別是獲取本地所有邏輯驅(qū)動(dòng)器、獲取驅(qū)動(dòng)器類(lèi)型、創(chuàng)建目錄和移除目錄。下面介紹這4個(gè)函數(shù)的定義。

獲取本地所有邏輯驅(qū)動(dòng)器函數(shù)的定義如下:

 
 
  1. DWORD GetLogicalDriveStrings(  
  2.  DWORD nBufferLength,  
  3.  LPTSTR lpBuffer  
  4. ); 

該函數(shù)的參數(shù)說(shuō)明如下。

nBufferLength:表示 lpBuffer 的長(zhǎng)度。

lpBuffer:表示接收本地邏輯驅(qū)動(dòng)器名的緩沖區(qū)。

該函數(shù)以字符串的形式返回本地所有可用的驅(qū)動(dòng)器名保存在lpBuffer中。返回字符串的形式如“C:\”,0,“D:\”,0,“E:\”,0,0。

獲取驅(qū)動(dòng)器類(lèi)型函數(shù)的定義如下:

 
 
  1. UINT GetDriveType(  
  2.  LPCTSTR lpRootPathName  
  3. ); 

該函數(shù)只有一個(gè)參數(shù)lpRootPathName,要獲取邏輯驅(qū)動(dòng)器類(lèi)型的驅(qū)動(dòng)器名,如“C:\”。函數(shù)返回值取以下值之一。

 
 
  1. DRIVE_UNKNOWN:無(wú)法識(shí)別此驅(qū)動(dòng)器類(lèi)型;  
  2. DRIVE_NO_ROOT_DIR:無(wú)效的驅(qū)動(dòng)器路徑;  
  3. DRIVE_REMOVEABLE:可移動(dòng)驅(qū)動(dòng)器,如 U 盤(pán)、移動(dòng)硬盤(pán)等;  
  4. DRIVE_FIXED:不可移動(dòng)驅(qū)動(dòng)器,指硬盤(pán);  
  5. DRIVE_REMOTE:網(wǎng)絡(luò)驅(qū)動(dòng)器;  
  6. DRIVE_CDROM:光盤(pán)驅(qū)動(dòng)器;  
  7. DRIVE_RAMDISK:虛擬驅(qū)動(dòng)器。 

創(chuàng)建目錄的函數(shù)定義如下:

 
 
  1. BOOL CreateDirectory(  
  2.  LPCTSTR lpPathName,  
  3.  LPSECURITY_ATTRIBUTES lpSecurityAttributes  
  4. ); 

該函數(shù)的參數(shù)說(shuō)明如下。

lpPathName:創(chuàng)建目錄的目錄名稱(chēng)。

lpSecurityAttributes:安全屬性,一般設(shè)置為 NULL。

移除目錄的函數(shù)定義如下:

 
 
  1. BOOL RemoveDirectory(  
  2.  LPCTSTR lpPathName  
  3. ); 

該函數(shù)的參數(shù)指定要移除的目錄的目錄名。

以上是關(guān)于驅(qū)動(dòng)器和目錄的幾個(gè)常用的API函數(shù)。


網(wǎng)站題目:網(wǎng)絡(luò)安全編程:文件相關(guān)操作API函數(shù)
文章地址:http://www.dlmjj.cn/article/dppsjhg.html