博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ seekp 函数文件流跳转功能产生数据覆盖问题解决
阅读量:5164 次
发布时间:2019-06-13

本文共 1121 字,大约阅读时间需要 3 分钟。

 

近来,使用C++输出一组数据到文件(*.txt). 需要在输出全部结果后,返回到文件头重新写入一组数据.

    使用seekp函数定位到相关位置:

    seekp函数有两种情况,主要是:

basic_ostream<_Elem, _Tr>& seekp( pos_type _Pos ); basic_ostream<_Elem, _Tr>& seekp( off_type _Off, ios_base::seekdir _Way );

其中:

_Pos

The position in the stream.

_Off

The offset relative to _Way.

_Way

One of the ios_base::seekdir enumerations.

The seekdir type as : static const seekdir beg, cur, end;

两个情况,分别表示:

1  跳转到指定位置 : pos_type _Pos  - 字节为跳转单位;

2  跳转到指定位置,并微调偏移: _way 是需要跳转的位置,有三种即beg-序列(数组,文件流,文件)的开始,

                                            -Off 跳转后位置的偏移量,不可以越界.

问题: 跳转后,如果跳转到流中间位置,继续打印或者输出新的数据,会出现覆盖旧数据的情况.    

解决办法是:再要插入新数据的位置处,返回插入之前,提前写入相关的类型相同数目的数据并最好以回车换行做标记.这样跳转到新位置后再直接写入数据覆盖事先写入到该位置的无用数据.

 

示例代码: 以下代码,先输入一些数据到txt文件,然后返回到文件起始位置,插入一些新的数据,为了避免覆盖原有数据,提前在起始位置写入了与要插入的数据相同数目相同同类型(或者其类型长度大于要插入类型长度)的数据.

void FileOperBack(){    int iNumCounter=0;    unsigned int recoData=0;    int recoveryData[6]={0,1,2,3,4,5};    ofstream testFout("G:\\WorkSpace\\FileOperation\\testFileBackRead.txt");    for (int i = 0; i < 6; i++)    {        testFout<
<<" "; } testFout<
<

转载于:https://www.cnblogs.com/xiangwengao/archive/2012/03/13/2394139.html

你可能感兴趣的文章
Problem E: Automatic Editing
查看>>
SpringBoot 使用 MyBatis 分页插件 PageHelper 进行分页查询
查看>>
《DSP using MATLAB》Problem 6.17
查看>>
微信公众平台开发实战Java版之如何网页授权获取用户基本信息
查看>>
一周TDD小结
查看>>
sizeof与strlen的用法
查看>>
Linux 下常见目录及其功能
查看>>
开源框架中常用的php函数
查看>>
nginx 的提升多个小文件访问的性能模块
查看>>
set&map
查看>>
集合类总结
查看>>
4.AE中的缩放,书签
查看>>
CVE-2014-6321 && MS14-066 Microsoft Schannel Remote Code Execution Vulnerability Analysis
查看>>
给一次重新选择的机会_您还会选择程序员吗?
查看>>
Mysql MHA高可用集群架构
查看>>
心急的C小加
查看>>
编译原理 First,Follow,select集求法
查看>>
iOS开发 runtime实现原理以及实际开发中的应用
查看>>
BZOJ2437 NOI2011兔兔与蛋蛋(二分图匹配+博弈)
查看>>
android 学习资源网址
查看>>