CreateFile之類的幾個函式

2021-08-15 12:13:46 字數 3891 閱讀 4695

這幾天看windows api一日一練,博主給畫出了道道,我來填填具體點的內容。

需求:想操作檔案、串列埠、並口、usb等等。

原理層:其實很簡單,就三步:開啟,操作,然後關閉。

實踐層1:開啟用createfile,讀寫操作用writefile、readfile,關閉用closehandle。

實踐層2:學習各個api怎麼用。

學習api,不就是先了解其作用,再瞅瞅返回值,最後學習學習引數怎麼用麼。

1、createfile

《作用》createfile:開啟或建立乙個檔案、串列埠、並口、usb等等。還可以開啟路徑喔,親。

《返回值》成功返回控制代碼,dwcreationdisposition設為create_always或open_always時,getlasterror返回error_already_exists。失敗返回invalid_handle_value。

《引數介紹》

handle

createfile(

lpctstr

lpfilename

,檔案路徑。

ansi:

最大max_path

個字元;

unicode

:最大32767

,and prepend "\\?\" to the path.

dword

dwdesiredaccess

,訪問方式,如

generic_read

dword

dwsharemode

,讀寫的共享方式。為

0時,不共享讀寫,物件不能被再次開啟。此屬性設定不要與訪問方式衝突。

lpsecurity_attributes

lpsecurityattributes

,null時,控制代碼不能被繼承。

dword

dwcreationdisposition

,create_always

:總是建立新的。

create_new

:存在時,失敗。

open_always

:不存在時,建立乙個新的。

open_existing

:不存在時,失敗。

dword

dwflagsandattributes

,一般用

file_attribute_normal

就夠了。

handle

htemplatefilenull );

對這種開啟、操作、關閉三步驟方式的物件,一般都會在開啟時指定各種屬性,且這些屬性僅會保留到關閉前。

建立路徑用:createdirectory、createdirectoryex

什麼是檔案一直保留的屬性:截圖如下。關心的屬性:大小、時間。

什麼是檔案開啟後才有的屬性:

以下屬性作用域:檔案開啟到關閉。即開啟時指定,關閉時消失。

檔案指標屬性、共享屬性、訪問屬性、建立屬性、檔案標識和屬性、安全屬性。前四個比較重要。file pointer是乙個可以更改的值,在讀寫資料時可通過設定其值來改變讀寫位置。

2、writefile和readfile

2-1、writefile

《作用》寫資料到檔案指標指定的位置。同步非同步都行。writefileex僅支援非同步操作。

《返回值》成功返回非0,失敗返回0。

《引數介紹》

bool writefile(
handle

hfile

lpcvoid

lpbuffer

,寫資料緩衝區

dword

nnumberofbytestowrite

,要寫入的位元組大小

lpdword

lpnumberofbyteswritten

);
2-2、readfile

《作用》從檔案指標指定位置開始讀資料。同步非同步都行。readfileex僅用於非同步操作。

《返回值》成功返回非0,不成功返回0。若返回值非0,但讀到的位元組是0,說明讀發生時,檔案指標在檔案結尾。以下任意一種情況發生時,readfile才返回:

ø管道寫入完畢後,會通知你寫操作完成。 ø

請求的位元組已讀到。 ø

發生錯誤。

《引數介紹》

bool readfile(
handle

hfile

lpvoid

lpbuffer

,[out]接受資料的buffer

dword

nnumberofbytestoread

,要讀的位元組大小

lpdword

lpnumberofbytesread

不講了。

);
2-3、flushfilebuffers

《作用》將快取中資料寫入檔案。

《返回值》成功非0,失敗0。控制代碼是console output時,失敗,因控制台輸出沒有快取。

《引數介紹》

bool flushfilebuffers(
handle

hfile

generic_write方式訪問的控制代碼。

);
對乙個不支援快取的i/o裝置,呼叫createfile時應以

file_flag_no_buffering

檔案標誌開啟。

2-4、setfilepointer   /*

typedef

unsigned

long       dword;*/

《作用》對已開啟的檔案,移動其指標。檔案指標比long大時,使用setfilepointerex更簡單。

《返回值》①成功且lpdistancetomovehigh為null,則返回值是檔案指標(dword型別)的低位。②lpdistancetomovehigh非null,返回值是檔案指標的低位,高位存放在lpdistancetomovehigh中。③失敗且lpdistancetomovehigh為null,返回值是invalid_set_file_pointer

。④失敗且lpdistancetomovehigh非null,返回值是

invalid_set_file_pointer

。⑤若新的檔案指標是負數,則函式失敗,getlasterror返回error_negative_seek。

《引數介紹》

dword setfilepointer(
handle

hfile

, generic_read或generic_write方式訪問的控制代碼。

long

ldistancetomove

,[in,out]檔案指標要移動的低位長度,有正負號。

plong

lpdistancetomovehigh

, 檔案指標距離頭或尾的高位長度,32位夠用時,此值設為null。

dword

dwmovemethod

檔案指標的起始位置:file_begin、file_current或file_end。

);
2-5、setendoffile

《作用》移動檔案的結尾位置到當前檔案指標所在位置。可以通過此函式來截斷或擴充套件設定檔案大小。若增大檔案,則舊的eof position和新的結束位置之間的內容未定義。這個是設定檔案的物理結束位置,設定邏輯結束位置,使用setfilevaliddata。

《返回值》成功非0,失敗0。

《引數介紹》

bool setendoffile(
handle

hfile

generic_write方式訪問的檔案控制代碼。

);
3、closehandle可關閉檔案控制代碼。

from: 

createfile失敗的原因

提個問題 關於createfile的 應用層符號鏈結名定義為 szsymboliclinkname db slink1 0 invoke createfile,addr szsymboliclinkname,generic read generic write,0,null,open existin...

CreateFile在串列埠中的運用

在32位的windows系統中,串列埠和其他通訊裝置是作為檔案處理的。對串列埠的操作和對檔案的操作是完全一樣的。通訊以呼叫createfile 開始。函式原型如下 handle createfile lpctstr lpfilename,指向檔名的指標 dword dwdesiredaccess,訪...

CreateFile開啟串列埠時串列埠名字的寫法

開啟com1到com9用 m hcom createfile t com1 generic read generic write,0,null,open existing,null,null 或者m hcom createfile t com1 generic read generic write,...