C++ 文件的随机读写

  • 概述
  • 随机读写
    • 函数
    • 例子
  • 指针流成员函数
  • 随机访问二进制数据

概述

文件的操作方式分为顺序读写和随机读写. 顺序读写指文件的指针只能从头移到尾巴. 随机读写指文件指针可以随意移动, 根据需要.

随机读写

文件指针: 在磁盘文件操作中有一个文件指针, 用来指明进行读写的位置.

函数

文件流提供了一些有关文件指针的成员函数:

成员函数 作用
gcount() 返回最后一次输入所读入的字节数
tellg() 返回输入文件指针的当前位置
seekg (文件中的位置) 将输入文件中指针移到指定的位置
seekg (位移量, 参照位置) 参照位置为基础移动到指定的位置
tellp() 返回输出文件指针当前的位置
seekp (文件中的位置) 将输出文件中指针移到指定的位置
seekp (位移量, 参照位置) 以参照位置为基础移动若干字节
  • g- 用于输入函数 (get), 例如 seekg 用于输出文件
  • p- 用于输出函数 (put), 例如 seekp 用于输出文件
  • 其他- 既可以输入又可输出的文件, 任意使者两组函数.

例子

从键盘输入 10 个整数, 并将其保存到数据文件 f1. dat 中, 再从文件中将数据读出来, 显示在屏幕上.

#include <fstream>
#include <iostream>
using namespace std;int main() {int a[10], b[10];// 打开文件fstream iofile("temp.txt", ios::in | ios::out);if(!iofile) {cerr << "open error!" << endl;exit(1);}// 写入文件cout << "enter 10 integer numbers:\n";for (int i = 0; i < 10; ++i) {cin >> a[i];iofile << a[i] << " ";}// 读取文件cout << "The numbers have been writen to file." << endl;cout << "Display the data by read from file:" << endl;iofile.seekg(0, ios::beg);for (int i = 0; i < 10; ++i) {iofile >> b[i];cout << b[i] << " ";}iofile.close();return 0;
}

输出结果:

enter 10 integer numbers:
1 2 3 4 5 6 7 8 9 10
The numbers have been writen to file.
Display the data by read from file:
1 2 3 4 5 6 7 8 9 10

指针流成员函数

文件中的位置和位移量为long型, 以字节为单位.
参照位置可以是下面三者之一:

  • ios::beg 文件开头 (默认)
  • ios::cur 指针当前的位置
  • ios::end 文件末尾


用法: 以 seekg (位移量, 参照位置) 为例:

  • file.seekg(3): 指针移动到第三个字符的位置
  • file.seekg(ios_base::beg): 指针移动到文件开头
  • file.seekg(-3, ios_base::cur): 向后移动三个字符
  • file.seekg(3, file.tellg()): 向后移动三个字符
  • file.seek(file. tellg() + 3): 向后移动三个字符

随机访问二进制数据

利用成员函数移动指针, 随机地访问二进制数据文件中任意一位置上的数据, 还可以修改文件中的内容.

学生数据处理:

#include <fstream>
#include <iostream>
#include "Student.h"
using namespace std;int main() {// 打开文件fstream iofile("student.txt",ios::in|ios::out);if(!iofile) {cerr << "open error!" << endl;exit(1);}// 向磁盘文件输出2个学生的数据Student stud[2]{{1, "Little White"},{2, "Big White"}};for (int i = 0; i < 2; ++i) {iofile.write((char *) &stud[i], sizeof(stud[i]));}// 读取学生数据,并显示Student read[2];for (int i = 0; i < 2; ++i) {iofile.seekg(i*sizeof(stud[i]),ios::beg);iofile.read((char *)&read[i],sizeof(read[0]));}// 修改第2个学生的数据后存回文件原位置stud[1].setId(1012); //修改stud[1].setName("Wu");iofile.seekp(sizeof(stud[0]),ios::beg);iofile.write((char *)&stud[1],sizeof(stud[2]));iofile.seekg(0,ios::beg);// 读入修改后的2个学生的数据并显示出来for(int i=0; i<2; i++){iofile.read((char *)&stud[i],sizeof(stud[i]));stud[i].display();}iofile.close( );return 0;
}

输出结果:

id= 1
name= Little White
id= 1012
name= Wu

C++ 文件的随机读写相关推荐

  1. c语言生成随机坐标,C语言 文件的随机读写详解及示例代码

    前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

  2. c语言二fseek从文件头移动_编程C语言文件的随机读写

    实现随机读写的关键是要按要求移动位置指针,这称为文件的定位. 文件定位 移动文件内部位置指针的函数主要有两个,即rewind()和fseek().rewind函数前面已多次使用过,其调用形式为:    ...

  3. c语言生成随机的坐标,C语言文件的随机读写

    前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

  4. C语言文件的随机读写

    C语言文件的随机读写 文件顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

  5. C语言文件操作(三) —— 文件的随机读写(fseek / lseek)

            目录 1.什么是文件的随机读写 2.认识文件随机读写函数 (1) fseek 函数 -- 移动文件指针的位置 (2) ftell 函数 -- 告知当前文件指针相对于起始位置的偏移量 ( ...

  6. c语言fseek128字节,C语言rewind和fseek函数的用法详解(随机读写文件)

    前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

  7. 文件操作(文件指针+顺序/随机读写)

    目录 一.文件 1.以文件功能分类: 2.文件名 二.文件指针 三.文件的打开和关闭 1.fopen fclose 2."r" - 读 3."w" - 写 四. ...

  8. C语言rewind函数返回值为空,C语言rewind和fseek函数的用法详解(随机读写文件)...

    前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

  9. python rewind_C语言rewind和fseek函数的用法详解(随机读写文件)

    前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

最新文章

  1. 解决Linux下inode使用率100%的问题
  2. WCF采用 netTcpBinding 发生的Socket errors
  3. RDC Lent ifm IP Analysis Exercise
  4. 使用Intent来启动Activity并传递参数
  5. 赛码网算法: 上台阶 ( python3实现 、c实现)
  6. GDOI2020游记
  7. 15 PP配置-生产计划-主数据-定义特殊采购类型
  8. Java分布式唯一ID生成方案——比UUID效率更高的生成id工具类
  9. 林洋能源:布局能源互联网 分布式光伏龙头再扬帆
  10. iframe框架_性能优化去除iframe脚手架升级方案
  11. Linux一些最基本命令
  12. 【古典密码】 凯撒密码 移位变换 仿射变换 多表代换 Python
  13. luogu1330 封锁阳光大学
  14. sql语句查询A表有而B表没有的数据
  15. 软件定义存储(SDS)学习一
  16. 《精通Tableau商业数据分析与可视化》之目录
  17. AMD重新进入核心竞争领域
  18. STM32F103C8T6以寄存器方式借助面包板搭建电路点亮LED流水灯详解
  19. ubuntu从tty终端模式返回到图形桌面
  20. 简单的java爬虫程序

热门文章

  1. 成神结局量子计算机雏惨,成神之日:消失数月之后雏再次出现,不过形象却差点让人认不出...
  2. 数中有术:看大数据如何让“时光倒流”
  3. 前端常见问题和技术解决方案
  4. ampak正基RF定频安装指导
  5. 变频空调和定频空调的区别
  6. 修改vscode终端字体
  7. shell 函数详解
  8. ROS机器人项目开发11例-ROS Robotics Projects(10)机器人Web工具集
  9. 中国量化金行业全解:金融工计机计金领就指
  10. PHP isset()和empty()的区别