這幾天看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(
handlehfile
lpcvoidlpbuffer
,寫資料緩衝區
dwordnnumberofbytestowrite
,要寫入的位元組大小
lpdwordlpnumberofbyteswritten
);2-2、readfile
《作用》從檔案指標指定位置開始讀資料。同步非同步都行。readfileex僅用於非同步操作。
《返回值》成功返回非0,不成功返回0。若返回值非0,但讀到的位元組是0,說明讀發生時,檔案指標在檔案結尾。以下任意一種情況發生時,readfile才返回:
ø管道寫入完畢後,會通知你寫操作完成。 ø
請求的位元組已讀到。 ø
發生錯誤。
《引數介紹》
bool readfile(
handlehfile
lpvoidlpbuffer
,[out]接受資料的buffer
dwordnnumberofbytestoread
,要讀的位元組大小
lpdwordlpnumberofbytesread
不講了。
);2-3、flushfilebuffers
《作用》將快取中資料寫入檔案。
《返回值》成功非0,失敗0。控制代碼是console output時,失敗,因控制台輸出沒有快取。
《引數介紹》
bool flushfilebuffers(
handlehfile
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(
handlehfile
, generic_read或generic_write方式訪問的控制代碼。
longldistancetomove
,[in,out]檔案指標要移動的低位長度,有正負號。
plonglpdistancetomovehigh
, 檔案指標距離頭或尾的高位長度,32位夠用時,此值設為null。
dworddwmovemethod
檔案指標的起始位置:file_begin、file_current或file_end。
);2-5、setendoffile
《作用》移動檔案的結尾位置到當前檔案指標所在位置。可以通過此函式來截斷或擴充套件設定檔案大小。若增大檔案,則舊的eof position和新的結束位置之間的內容未定義。這個是設定檔案的物理結束位置,設定邏輯結束位置,使用setfilevaliddata。
《返回值》成功非0,失敗0。
《引數介紹》
bool setendoffile(
handlehfile
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,...