文件指针
来源:互联网 发布:java中do while的用法 编辑:程序博客网 时间:2024/05/22 02:51
一.移动文件指针
SetFilePointer,hFile,lDistanceToMove,lpDistanceToMoveHigh,dwMoveMethod
dwMoveMethod 指明移动的模式
FILE_BEGIN 不管文件处于什么地方,总是从文件的头部开始移动,这时的位置参数相当于指定了一个绝对位置
FILE_CURRENT 从当前的文件指针处开始移动,这时的位置参数相当于指定了一个相对位置
FILE_END 从文件尾开始移动,如果要从文件尾往回移动一段距离,那么位置参数就应该指定为负数
Win32文件操作函数可以支持很多对象,有些对象并不支持文件指针,对他们就不能使用SetFilePointer函数
既然文件指针可以设置,那么如何获取当前的文件指针呢?
实际上 并没有一个专用的函数可以完成这个功能,,但是我们可以巧妙的利用SetFilePointer来获取当前的文件指针
invoke SetFilePointer,hFile,0,NULL,FILE_CURRENT
实际上文件并没有移动,所以返回值就是当前的文件指针
二.文件分割
文件指针可以移动到文件所有数据的后面,比如,现在文件的长度是100B,但是还是可以把文件指针的数据移动到1000B的位置,这样的操作有什么用处呢?用途是可以将文件扩展到需要的长度,,接着在用WriteFile写入数据,就是从1000B的地方开始写入.
使用SetEndOfFile函数也可以扩展文件长度,SetEndOfFile总是将文件的长度调整到当前文件指针指向的长度,,所以这个函数还有截断文件的功能,当文件指针位于文件文件中间的时候,函数将文件指针后面的内容截断,当文件指针位于文件尾以后的位置,函数将文件长度扩展.
invoke SetEndOfFile,hFile
当文件被扩展的时候,被扩展部分的内容是不确定的(MSDN说的,试验的结果好像这部分总是0)
;--------------------------------------------------------------------------------;程序环境设置.386.model flat,stdcalloption casemap:none;--------------------------------------------------------------------------------;头文件与库文件导入include windows.incinclude kernel32.incinclude user32.incincludelib kernel32.libincludelib user32.libLmacro@var:VARARGLOCAL@lbl.const@lbldb@var,0.codeexitm<offset @lbl>endm;--------------------------------------------------------------------------------;函数定义;--------------------------------------------------------------------------------;等值替换定义;--------------------------------------------------------------------------------;宏定义;--------------------------------------------------------------------------------;包含文件;--------------------------------------------------------------------------------;已初始化数据段.datadwDistanceLowdd1024 * 1024;--------------------------------------------------------------------------------;未初始化数据段.data?hFiledd?dwBytesdd?;--------------------------------------------------------------------------------;常量段.constszStringdb"0123456789",0;--------------------------------------------------------------------------------;代码段.codestart:invokeCreateFile,L("test.dat"),GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL.ifeax == INVALID_HANDLE_VALUEinvokeMessageBox,NULL,L("Create Files Fails"),L("Error"),MB_OKjmp@F.endifmovhFile,eaxinvokeSetFilePointer,hFile,1024,NULL,FILE_CURRENT.ifeax != NULLinvokeMessageBox,NULL,L("Success"),L("Success"),MB_OK.endifinvokeWriteFile,hFile,addr szString,sizeof szString,addr dwBytes,NULLinvokeSetEndOfFile,hFileinvokeCloseHandle,hFile@@:invokeExitProcess,NULL;--------------------------------------------------------------------------------end start ;函数入口地址
如果文件大小为1kb 那么Size On Disk 就为4kb 因为在我的电脑上 磁盘对齐粒度是4kb
- 文件指针
- 指针文件
- 文件指针
- 文件指针
- 文件指针
- 文件指针 & 文件描述符
- 使用文件指针操作文件
- 文件IO(文件指针)
- 文件描述符&文件指针
- c++文件指针总结
- 头文件和指针
- 文件指针操作总结
- fseek() 移动文件指针
- 关闭文件指针不对
- 文件指针回到开头
- 移动文件指针细节
- 文件指针位置操作
- 文件指针问题
- 现实迷途 第三十二章 阴晴反复(下)
- IOS开发之---关闭键盘
- java做的简单的数学测试题
- 统计学习j2ee的必学项
- Android开发之--读取文件夹下图片生成略缩图并点击显示大图
- 文件指针
- 架构Tips——海量数据
- Apache+php+mysql在windows下的安装与配置图解
- keepalived安装
- MyEclipse Java Build Path详解
- 近期要解决的4个问题
- 文本块的操作
- onCreateContextMenu 与 onCreateOptionsMenu 区别
- android平台- wifi function porting