文件指针

一.移动文件指针
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,stdcall
option casemap:none
;--------------------------------------------------------------------------------
;头文件与库文件导入
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
L	macro	@var:VARARG
LOCAL	@lbl
.const
@lbl		db	@var,0
.code
exitm	<offset @lbl>
endm
;--------------------------------------------------------------------------------
;函数定义
;--------------------------------------------------------------------------------
;等值替换定义
;--------------------------------------------------------------------------------
;宏定义
;--------------------------------------------------------------------------------
;包含文件
;--------------------------------------------------------------------------------
;已初始化数据段
.data
dwDistanceLow	dd	1024 * 1024
;--------------------------------------------------------------------------------
;未初始化数据段
.data?
hFile		dd		?
dwBytes	dd		?
;--------------------------------------------------------------------------------
;常量段
.const
szString	db		"0123456789",0
;--------------------------------------------------------------------------------
;代码段
.code
start:
invoke	CreateFile,L("test.dat"),GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
.if		eax == INVALID_HANDLE_VALUE
invoke	MessageBox,NULL,L("Create Files Fails"),L("Error"),MB_OK
jmp		@F
.endif
mov		hFile,eax
invoke	SetFilePointer,hFile,1024,NULL,FILE_CURRENT
.if		eax != NULL
invoke	MessageBox,NULL,L("Success"),L("Success"),MB_OK
.endif
invoke	WriteFile,hFile,addr szString,sizeof szString,addr dwBytes,NULL
invoke	SetEndOfFile,hFile
invoke	CloseHandle,hFile
@@:
invoke	ExitProcess,NULL
;--------------------------------------------------------------------------------
end start  ;函数入口地址

 

 

 

如果文件大小为1kb   那么Size On Disk 就为4kb   因为在我的电脑上  磁盘对齐粒度是4kb

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

见证下的自我变化-2014全年总结

又是一年总结季&#xff0c;回过头看看看自己的成长&#xff0c;心里真的是满满的喜悦之情…… 一年前自己的总结博客&#xff1a;http://blog.csdn.net/huo065000/article/details/19632603 半年前自己的总结博客&#xff1a;http://blog.csdn.net/huo065000/article/details/…

【Linux学习篇】This virtual machine is configured for 64-bit guest operating systems.……

在学习Linux的基本操作的时候&#xff0c;安装虚拟环境则提示自己 This virtualmachine is configured for 64-bit guest operatingsystems.……起初由于各种拒绝的心理&#xff0c;所以屏蔽了这个错误&#xff0c;但是屏蔽永远也解决不了问题的&#xff0c;所以自己则尝试百度…

图解SSIS监视文件夹并自动导入数据

图解SSIS监视文件夹并自动导入数据 原文:图解SSIS监视文件夹并自动导入数据 演示案例&#xff1a;让系统自动监视文件夹&#xff0c;并把文件夹下面的excel文件导入到sql中&#xff0c;之后清空目录。这个过程以往都需要写程序来实现或者定时执行&#xff0c;现在可以用ssis来订…

WP8手机解锁时提示“请确保IPOVERUSBSVC服务正常运行”解决方法

如果你各种重启服务 卸载手机 重装驱动都试过了还不行&#xff0c;请看看你是否安装了Hyper-v或Vitualbox虚拟机&#xff0c;很有可能是虚拟交换机造成的。 我在网络连接属性里看到这个 把它卸载后&#xff0c;解锁成功。 解锁后记得重新安装卸载的那个网络服务转载于:https://…

浮点数的存储

-------------------------------------------------------------------------------- 在VC6.0----float环境一共32位 其中第一位是符号位 第二到第9位中间8位为小数点位置&#xff08;指数以127的二进制为原点向下为负指数 向上为正指数&#xff09;后面23位为数据位。 S EE…

一款基于css3鼠标经过圆形旋转特效

今天给大家分享一款基于css3鼠标经过圆形旋转特效。当鼠标经过的时候图片边框颜色旋转&#xff0c;图片显示详情。该实例适用浏览器&#xff1a;IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗。效果图如下&#xff1a; 在线预览 源码下载 实现的代码。 ht…

Eclipse生成jar包

前言: 本宅因为要写XXX软件的一个插件,来用用java,接触3天后 在打jar包上卡住了..... 经过大量的百度搜索后有如下几种解决方案: 解决方案: 一.安装Fatjar 在线安装地址:http://kurucz-grafika.de/fatjar 悲剧的是我怎么也安装不上去,于是放弃(在线下载包什么 我的Eclipse版…

Buffer和Cache的区别

现在不都是只有page cache了吗&#xff1f; buffer pages其实也是page cache里面的页。只是多了一层抽象&#xff0c;通过buffer_head来进行一些访问管理对,从Linux算法实现的角度&#xff0c;page cache和buffer cache目前是一样的&#xff0c;但是从功能抽象和具体应用来讲&a…

Android刷机

这里也有一篇比较详细的 http://blog.csdn.net/qq1084283172/article/details/52334452 官网刷机包 https://developers.google.com/android/images#hammerhead 我的机器是Nexus 5 一. 安装驱动 如何进入fastboot模式 1. 拔掉数据线&#xff0c;将手机关机 2. 关机后同时按…

viewController的生命周期

一、结构 按结构可以对iOS的所有ViewController分成两类&#xff1a; 1、主要用于展示内容的ViewController&#xff0c;这种ViewController主要用于为用户展示内容&#xff0c;并与用户交互&#xff0c;如UITableViewController&#xff0c;UIViewController。 2、用于控制和显…

android123 zhihuibeijing 新闻中心-新闻 页签 ViewPagerIndicator实现

## ViewPagerIndicator ## 使用导入ViewPagerIndicator库的方式相当于可以改源码&#xff0c;打包编译Eclips可以自动完成。ViewPager指针项目&#xff0c;在使用ViewPager的时候能够指示ViewPager所在的位置&#xff0c;就像Google Play中切换的效果一样&#xff0c;还能使用…

基于Maven的spring_security入门

配置文件的修改点没什么变化&#xff0c;可以参考&#xff1a;http://blog.csdn.net/ouitiken/article/details/8830505 pom.xml的依赖参考&#xff1a; <dependencies><!-- Commons --><dependency><groupId>commons-dbcp</groupId><artifac…

使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)

前言 为了保证每周一篇的进度&#xff0c;又由于Vitamio新版本没有发布&#xff0c; 决定推迟本地播放的一些功能&#xff08;截图、视频时间、尺寸等&#xff09;&#xff0c;跳过直接写在线播放部分的章节。从Vitamio的介绍可以看得出&#xff0c;其支持http、m3u8等多种网络…

20个新鲜出炉的网站模板【HTML PSD】

这里给大家分享20 个新鲜出炉的免费网站模板。这些设计元素将成为你下一个项目的重要素材&#xff0c;可以帮你节省很多的时间。与往常一样&#xff0c;我们经常漫游网络&#xff0c;寻找最好的资源&#xff0c; HTML、CSS 和 PSD 等等&#xff0c;记得关注啊。 您可能感兴趣的…

怎么用代码制作WordPress的归档页面

先看看效果&#xff0c;这个是我网站的归档页面&#xff1a;http://www.shenjieblog.com/archives 其实WordPress自带了一个归档的功能&#xff0c;但是只能显示在网页中的某一个部分&#xff0c;但是我想单独制作一个归档页面&#xff0c;因为看见很多网站都有这个&#xff0c…

【web必知必会】—— 使用DOM完成属性填充

本文介绍了使用DOM的简单方法实现动态加载图片的功能。 前文介绍了&#xff1a; 1 DOM四个常用的方法 首先看一下效果&#xff0c;初始时是一个相册&#xff0c;可以点击导航&#xff0c;切换图片&#xff0c;并切换下方显示内容&#xff1a; 点击house&#xff0c;可以动态的切…

使用 WordPress 主题制作的20个精美网页

WordPress 是一款个人博客系统&#xff0c;并逐步演化成一款内容管理系统软件&#xff0c;它是使用 PHP 语言和 MySQL 数据库开发的。用户可以在支持 PHP 和 MySQL 数据库的服务器上使用自己的博客。这里给大家分享使用 WordPress 主题制作的20个精美网页。 您可能感兴趣的相关…

关于监听与控制设备旋转全解析(UIDeviceOrientationDidChangeNotification)

一类情况&#xff1a; 初始化app的方向&#xff0c;比如只支持横屏或者竖屏。下面举例只支持竖屏的案例 在app的属性里面手动设置 上面标注了该app支持的方向种类&#xff0c;要是在app里支持Portrait方向&#xff0c;还需要添加以下代码 二类情况&#xff1a; 上面的代码表明a…

标志寄存器FLAG

FLAG标志寄存器按位操作&#xff0c;FLAG是16位寄存器&#xff0c;第0位为CF标志第2位为PF标志... 如图(FLAG各标志位以及在DEBUG中对应的显示)&#xff1a;

powerdesigner低版本打开高版本方式为只读导致无法保存PD只读read-only-mode

由于版本号不一致 打开PD文件后提示&#xff1a; 点击【确定】后打开&#xff0c;点击【取消】后打不开 但打开后修改完毕保存提示&#xff1a; 解决办法&#xff1a; pdm文件实际上是个xml文件&#xff0c;直接用文本编辑器打开该文件修改版本号即可 把根节点最后的版本号改成…