C++ 文件的随机读写
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++ 文件的随机读写相关推荐
- c语言生成随机坐标,C语言 文件的随机读写详解及示例代码
前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...
- c语言二fseek从文件头移动_编程C语言文件的随机读写
实现随机读写的关键是要按要求移动位置指针,这称为文件的定位. 文件定位 移动文件内部位置指针的函数主要有两个,即rewind()和fseek().rewind函数前面已多次使用过,其调用形式为: ...
- c语言生成随机的坐标,C语言文件的随机读写
前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...
- C语言文件的随机读写
C语言文件的随机读写 文件顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...
- C语言文件操作(三) —— 文件的随机读写(fseek / lseek)
目录 1.什么是文件的随机读写 2.认识文件随机读写函数 (1) fseek 函数 -- 移动文件指针的位置 (2) ftell 函数 -- 告知当前文件指针相对于起始位置的偏移量 ( ...
- c语言fseek128字节,C语言rewind和fseek函数的用法详解(随机读写文件)
前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...
- 文件操作(文件指针+顺序/随机读写)
目录 一.文件 1.以文件功能分类: 2.文件名 二.文件指针 三.文件的打开和关闭 1.fopen fclose 2."r" - 读 3."w" - 写 四. ...
- C语言rewind函数返回值为空,C语言rewind和fseek函数的用法详解(随机读写文件)...
前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...
- python rewind_C语言rewind和fseek函数的用法详解(随机读写文件)
前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...
最新文章
- 解决Linux下inode使用率100%的问题
- WCF采用 netTcpBinding 发生的Socket errors
- RDC Lent ifm IP Analysis Exercise
- 使用Intent来启动Activity并传递参数
- 赛码网算法: 上台阶 ( python3实现 、c实现)
- GDOI2020游记
- 15 PP配置-生产计划-主数据-定义特殊采购类型
- Java分布式唯一ID生成方案——比UUID效率更高的生成id工具类
- 林洋能源:布局能源互联网 分布式光伏龙头再扬帆
- iframe框架_性能优化去除iframe脚手架升级方案
- Linux一些最基本命令
- 【古典密码】 凯撒密码 移位变换 仿射变换 多表代换 Python
- luogu1330 封锁阳光大学
- sql语句查询A表有而B表没有的数据
- 软件定义存储(SDS)学习一
- 《精通Tableau商业数据分析与可视化》之目录
- AMD重新进入核心竞争领域
- STM32F103C8T6以寄存器方式借助面包板搭建电路点亮LED流水灯详解
- ubuntu从tty终端模式返回到图形桌面
- 简单的java爬虫程序