国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

文件指針詳解,SetFilePointerEx設置和查詢文件指針

2019-11-11 06:31:54
字體:
來源:轉載
供稿:網友
1. 文件指針我們大概已經知道該如何創建或者打開一個文件,用CreateFile函數可以輕松做到,還不了解的小伙伴,請穿越到http://www.cnblogs.com/bigsponge/articles/4936599.htmlCreateFile函數會使系統創建一個文件內核對象來管理對文件的操作。在這個內核對象內部有一個文件指針,這是我們今天的主角。文件指針究竟是什么?文件指針是一個64位的偏移量,指向文件起始位置的相對的位置,假設文件起始位置的地址為xxxx,文件指針為10,那么指針實際指向的地址是xxxx+10。文件指針的作用是什么?當我們要調用ReadFile或WriteFile函數對文件進行讀和寫操作的時候,讀取和寫入的起始位置永遠在文件指針指向的位置。我們來看看ReadFile函數和WriteFile函數的原型:ReadFile函數原型:BOOL ReadFile(        HANDLE    hFile,        PVOID    pvBuffer,        DWord    nNumBytesToRead,        PDWORD    pdwNumBytes,        OVERLAPPED*    pOverlapped);WriteFile函數原型:BOOL WriteFile(        HANDLE    hFile,        CONST VOID    *pvBuffer,        DWORD    nNumBytesToWrite,        PDWORD    pdwNumBytes,        OVERLAPPED*    pOverlapped);hFile  標識要讀或者寫的文件的句柄pvBuffer  pvBuffer指向一個緩存,調用ReadFile函數時,系統將讀出的數據保存在pvBuffer指向的緩存中;調用WriteFile函數時,系統將pvBuffer指向的緩存中存儲的數據寫入文件nNumBytesTo*  標識要從設備讀出或者寫入多少字節的數據pdwNumBytes  指向一個DWORD變量,函數會將成功從設備讀取的字節數和成功寫入設備的字節數保存在這個參數中pOverlapped  標識函數是用同步還是異步的方式完成可以看到,不管是讀還是寫,函數中都沒有參數用來存放在文件哪個位置讀或者寫,這個存放位置永遠保存在文件指針中。當然,我們可以通過SetFilePointerEx函數來設置文件指針的位置。當調用CreateFile函數創建文件內核函數時,文件指針被初始化為0,即指向文件起始位置,此時若調用ReadFile函數讀取10個字節的數據,文件指針會+10,也就是指向。。。2. 用SetFilePointerEx()設置文件指針的位置:函數原型:BOOL SetFilePointerEx(        HANDLE    hFile,        LARGE_INTEGER    liDistanceToMove,        PLARGE_INTEGER    pliNewFilePointer,        DWORD    dwMoveMethod);hFile  我們想要修改哪個文件內核對象的文件指針liDistanceToMove  標識文件指針要移動多少個字節pliNewFilePointer  系統會在pliNewFilePointer參數指向的LARGE_INTEGER結構體中保存文件指針的新值dwMoveMethod  標識移動文件指針的方式,有三個值可以選擇:FILE_BEGIN 標識文件指針的起始位置為文件首,可以傳給SetFilePointerEx的dwMoveMethod參數的值值	含義FILE_BEGIN	文件指針起始位置為文件起始位置,當調用SetFilePointerEx成功后,文件指針將指向liDistanceToMove指向的位置。FILE_CURRENT	文件指針起始位置為當前文件指針指向的位置FILE_END	文件指針起始位置為文件末尾3. 用SetFilePointerEx()查詢文件指針的位置:Windows并沒有提供一個可以查詢文件指針的GetFilePointerEx函數,但我們可以調用SetFilePointerEx()函數,將liDistanceToMove設為0來達到相同的效果,代碼如下:1 LARGE_INTEGER  liCurrentPosition;2 liCurrentPosition.QuadPart = 0;3 SetFilePointerEx(hFile, liCurrentPosition, &liCurrentPosition, FILE_CURRENT);
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 萨迦县| 石门县| 营口市| 正镶白旗| 隆德县| 肥乡县| 沙坪坝区| 清原| 林芝县| 吴旗县| 临高县| 抚州市| 施甸县| 麻城市| 自贡市| 天全县| 黔南| 辽源市| 合阳县| 凌海市| 仁怀市| 汕尾市| 剑河县| 光泽县| 平度市| 疏附县| 武穴市| 扎鲁特旗| 龙井市| 龙口市| 南充市| 金乡县| 定安县| 靖西县| 静海县| 敖汉旗| 博野县| 湖州市| 朔州市| 阿荣旗| 武定县|