首页  >   经验  >   设置文件指针的函数SetFilePointer的分析

设置文件指针的函数SetFilePointer的分析

查看 codexia 的博客 2015-06-23 16:00:13 6663
手机阅读 | 转发赚积分
手机收藏 | 分享给好友
简介设置文件指针的函数SetFilePointer,在操作文件时非常常用,且必须了解。在对文件操作或者是对数据块进行操作时,经常使用到的就是移动文件指针。本文通过遇见的问题深入分析了此函数的实现机制,包括问题的出现以及问题的解决,对函数有个彻底的把握,今后的使用则会灵活自由。
    此函数用来设置文件指针的位置。有四个参数,依次是文件句柄、移动的距离低32位(LONG类型)、移动距离高32位,移动的起始位置。具体的含义请查询MSDN了解,在此只讲述让人迷惑不解的地方。
    我对一段数据进行两次的读写,并且是跳跃性的读取,因此就需要继续文件指针定位。在第一次读取时,使用此函数能够正确读出数据,可是第二次读取却是乱码。对地址等都再三检查,读取代码也正确无误,最后只有把焦点放在不太熟悉的SetFilePointer函数上面,然后查阅MSDN和验证,再仔细分析,才最终确定问题就是出在这个函数了。因为是测试,所以没有添加错误检验。虽然我在网上找到代码,运行后确实能够正确,但是引入了LARGE_INTEGER这个数据结构,如果照用,肯定是不会有错的,但是这个结构又会将问题复杂化。所以就进一步查MSDN,仔细分析和使用代码验证,最后只用简单的数据类型同样实现正确的读取,这样才找到问题的核心。经过假设和验证,证明假设是正确的。
    VS中,LONG类型占32位。如果一个文件很大,32位无法定位到表示范围之外的位置。这样设置文件指针,就超出表示范围而出问题。第二个参数是有符号数,有正负数之分。如果偏移量传给第二个参数来移动文件指针,如果正向偏移过大,传递给第二个参数,最高位则作为了符号位,结果将最高位的1解释成负数,从而函数内解释成反向移动文件指针,如果文件指针移动起始地址是FILE_BEGIN,则将文件指针移到文件开始的前面了。因而不是有效的移动,指针则不会移动。如果此时读取数据,则是从原来的位置开始读取,而不是从应该设置的
1.微信扫码
2.点击按钮,粘贴命令
自动刷新 手动刷新
命令:rd 52vSY 复制
提示:如果您发送了命令,自动刷新会展开全文。自动刷新最多60秒,超过60秒请点击手动刷新。
创作不易,汗水不止!为防止劳动果实被爬虫窃取,开启了反爬机制,需要您发送命令继续阅读。取关会再次出现此提示。一段时间后出现此提示,请再次发送即可。如有问题,请加客服微信Freeme007处理。感谢您的理解。
标注
评论
站内搜
百度搜
传送到手机
手机扫码,识别文字,完成传送x
加载中...
标注内容x
加载中...
添加标注x
文章标题:设置文件指针的函数SetFilePointer的分析
文章地址:http://www.cjjjs.com/article/623201513016210
转载到个人博客,请在文末带上右侧内容(含超链接):本文转载自:设置文件指针的函数SetFilePointer的分析
收藏 0 点赞 0
公众号
微信赞赏
支付宝赞赏
领支付宝大红包
QQ群

相关阅读

  1. C++ Primer Plus 6th 4.12 复习题 第12题 数组下标使用和数组指针的使用对比 查找全网同类文章
  2. C++ Primer Plus 6th 4.12 复习题 第11题 声明指针并输出指针的值 查找全网同类文章
  3. 函数的形参是函数指针,能设置默认值吗?如果能应该怎么写 查找全网同类文章
  4. C++头文件包含的各种姿势,你知道不 查找全网同类文章
  5. c指针的指向与赋值的区别 查找全网同类文章
  6. 探讨C语言设计一个支持灵活修改参数的实现方案 查找全网同类文章
  7. 普通函数指针、类静态函数指针、类成员函数指针全面分析 查找全网同类文章
  8. 头文件用1.txt替代怎么不可以 查找全网同类文章
  9. 诡异的指针传参,怎么死的都不知道 查找全网同类文章
  10. c和c++中如何实现对已存入文件的内容进行修改? 查找全网同类文章
分享到:
分享文章[设置文件指针的函数SetFilePointer的分析]到QQ空间

相关阅读

猜您感兴趣