日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文件指针

發(fā)布時間:2023/12/1 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件指针 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一.移動文件指針
SetFilePointer,hFile,lDistanceToMove,lpDistanceToMoveHigh,dwMoveMethod
dwMoveMethod 指明移動的模式
FILE_BEGIN??????? 不管文件處于什么地方,總是從文件的頭部開始移動,這時的位置參數(shù)相當(dāng)于指定了一個絕對位置
FILE_CURRENT?? 從當(dāng)前的文件指針處開始移動,這時的位置參數(shù)相當(dāng)于指定了一個相對位置
FILE_END?????????? 從文件尾開始移動,如果要從文件尾往回移動一段距離,那么位置參數(shù)就應(yīng)該指定為負(fù)數(shù)

Win32文件操作函數(shù)可以支持很多對象,有些對象并不支持文件指針,對他們就不能使用SetFilePointer函數(shù)

既然文件指針可以設(shè)置,那么如何獲取當(dāng)前的文件指針呢?
實際上 并沒有一個專用的函數(shù)可以完成這個功能,,但是我們可以巧妙的利用SetFilePointer來獲取當(dāng)前的文件指針

invoke SetFilePointer,hFile,0,NULL,FILE_CURRENT
實際上文件并沒有移動,所以返回值就是當(dāng)前的文件指針

二.文件分割
文件指針可以移動到文件所有數(shù)據(jù)的后面,比如,現(xiàn)在文件的長度是100B,但是還是可以把文件指針的數(shù)據(jù)移動到1000B的位置,這樣的操作有什么用處呢?用途是可以將文件擴展到需要的長度,,接著在用WriteFile寫入數(shù)據(jù),就是從1000B的地方開始寫入.

使用SetEndOfFile函數(shù)也可以擴展文件長度,SetEndOfFile總是將文件的長度調(diào)整到當(dāng)前文件指針指向的長度,,所以這個函數(shù)還有截斷文件的功能,當(dāng)文件指針位于文件文件中間的時候,函數(shù)將文件指針后面的內(nèi)容截斷,當(dāng)文件指針位于文件尾以后的位置,函數(shù)將文件長度擴展.
invoke SetEndOfFile,hFile

當(dāng)文件被擴展的時候,被擴展部分的內(nèi)容是不確定的(MSDN說的,試驗的結(jié)果好像這部分總是0)

?

?

;-------------------------------------------------------------------------------- ;程序環(huán)境設(shè)置 .386 .model flat,stdcall option casemap:none ;-------------------------------------------------------------------------------- ;頭文件與庫文件導(dǎo)入 include windows.inc include kernel32.inc include user32.incincludelib kernel32.lib includelib user32.libL macro @var:VARARGLOCAL @lbl.const@lbl db @var,0.codeexitm <offset @lbl> endm ;-------------------------------------------------------------------------------- ;函數(shù)定義 ;-------------------------------------------------------------------------------- ;等值替換定義 ;-------------------------------------------------------------------------------- ;宏定義 ;-------------------------------------------------------------------------------- ;包含文件 ;-------------------------------------------------------------------------------- ;已初始化數(shù)據(jù)段 .data dwDistanceLow dd 1024 * 1024 ;-------------------------------------------------------------------------------- ;未初始化數(shù)據(jù)段 .data? hFile dd ? dwBytes dd ? ;-------------------------------------------------------------------------------- ;常量段 .const szString db "0123456789",0 ;-------------------------------------------------------------------------------- ;代碼段 .codestart:invoke CreateFile,L("test.dat"),GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL.if eax == INVALID_HANDLE_VALUEinvoke MessageBox,NULL,L("Create Files Fails"),L("Error"),MB_OKjmp @F.endifmov hFile,eaxinvoke SetFilePointer,hFile,1024,NULL,FILE_CURRENT.if eax != NULLinvoke MessageBox,NULL,L("Success"),L("Success"),MB_OK.endifinvoke WriteFile,hFile,addr szString,sizeof szString,addr dwBytes,NULLinvoke SetEndOfFile,hFileinvoke CloseHandle,hFile@@:invoke ExitProcess,NULL ;-------------------------------------------------------------------------------- end start ;函數(shù)入口地址

?

?

?

如果文件大小為1kb?? 那么Size On Disk 就為4kb?? 因為在我的電腦上? 磁盤對齊粒度是4kb

?

總結(jié)

以上是生活随笔為你收集整理的文件指针的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。