這篇文章主要講解了“對文件操作的封裝方法”,文中的講解內容簡(jiǎn)單清晰,易于學(xué)習與理解,下面請大家跟著(zhù)小編的思路慢慢深入,一起來(lái)研究和學(xué)習“Mysql對文件操作的封裝方法”吧!
在查看Mysql對文件的操作中發(fā)現,它在不同的操作系統上對文件的操作,除了使用標準C運行庫函數,包括open、close、seek等,在Win32下的文件和目錄操作函數使用了CreatFile、CloseHandl、SetFilePointer等,不明白為什么對文件的操作要封裝出兩套函數。
查看了相關(guān)資料,其實(shí)使用API和標準庫函數都可以生成文本文件和二進(jìn)制文件,在這點(diǎn)上沒(méi)有區別。同read()對應的是ReadFile,同write()對應的是WriteFile,同seek()對應的是SetFilePointer,同close對應的是CloseHandle。這兩套函數都可以使用。但是Win
32系統把文件的概念進(jìn)行了擴展。無(wú)論是文件、通信設備、命名管道、郵件槽、磁盤(pán)、還是控制臺,都是用API函數CreateFile來(lái)打開(kāi)或創(chuàng )建的。該函數的聲明為:
HANDLE
CreateFile(
LPCTSTR lpFileName, // 文件名
DWORD dwDesiredAccess, // 訪(fǎng)問(wèn)模式
DWORD dwShareMode, // 共享模式
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
// 通常為NULL
DWORD dwCreationDistribution, // 創(chuàng )建方式
DWORD
dwFlagsAndAttributes, // 文件屬性和標志
HANDLE hTemplateFile // 臨時(shí)文件的句柄,通常為NULL
);
如果調用成功,那么該函數返回文件的句柄,如果調用失敗,則函數返回INVALID_HANDLE_VALUE。
在用ReadFile和WriteFile讀寫(xiě)時(shí),既可以同步執行,也可以異步執行。ReadFile和WriteFile函數是否為執行異步操作是由CreateFile函數決定的。如果在調用CreateFile創(chuàng )建句柄時(shí)指定了FILE_FLAG_OVERLAPPED標志,那么調用ReadFile和WriteFile對該句柄進(jìn)行的讀寫(xiě)操作就是異步的,如果未指定異步標志,則讀寫(xiě)操作是同步的。在同步執行時(shí),函數直到操作完成后才返回。這意味著(zhù)在同步執行時(shí)線(xiàn)程會(huì )被阻塞,從而導致效率下降。在異步執行時(shí),即使操作還未完成,調用的函數也會(huì )立即返回。費時(shí)的I/O操作在后臺進(jìn)行,這樣線(xiàn)程就可以干別的事情。這樣可以大大的提高效率。這一點(diǎn)是值得我們學(xué)習和借鑒的,對于我們在文件的操作方面也可以對win32系統進(jìn)行封裝來(lái)提高文件操作的效率。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站