C++读写文件操作(fstream、ifstream、ofstream、seekg、seekp、tellg、tellp用法)[通俗易懂]
2023-06-13 09:11:55 时间
大家好,又见面了,我是你们的朋友全栈君。
本文主要总结用C++的fstream、ifstream、ofstream方法读写文件,然后用seekg()、seekp()函数定位输入、输出文件指针位置,用tellg()、tellp()获取当前文件指针位置。
一、核心类和函数功能讲解
fstream:文件输入输出类。表示文件级输入输出流(字节流);
ifstream:文件输入类。表示从文件内容输入,也就是读文件;
ofstream:文件输出类。表示文件输出流,即文件写。
seekg():输入文件指针跳转函数。表示将输入文件指针跳转到指定字节位置‘
seekp():输出文件指针跳转函数。表示将输出文件指针跳转到指定位置。
下面将通过总结一个读写*.txt文件来演示上述输入输出类和文件跳转函数用法。
二、简单示例
2.1源代码
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdio>
struct planet
{
char name[20];
double population;
double g;
}p1;
int main()
{
using namespace std;
/*读文件*/
int ct = 0; //计数
fstream finout; //文件读和写字节流
finout.open("test1.txt", ios_base::in | ios_base::out | ios_base::binary); //二进制读和写
if (!finout.is_open())
{
cout << "open file E:\\1TJQ\\test1.txt fail!";
system("pause");
return false;
}
finout.seekg(0); //输入流文件跳转指针,回到文件起始位置
cout << "show red file\n";
while (finout.read((char *) &p1,sizeof p1))
{
cout << ct++ << " " << p1.name << " " << p1.population << " " << p1.g << endl;
}
if (finout.eof())
finout.clear(); //清空结尾eof标志,可以再次打开该文件
/*写文件*/
streampos place = 3 * sizeof p1; //转换到streampos类型
finout.seekg(place); //随机访问
if (finout.fail())
{
cerr << "error on attempted seek\n";
system("pause");
exit(EXIT_FAILURE);
}
finout.read((char *)&p1, sizeof p1);
cout << "\n\nshow writed file\n";
cout << ct++ << " " << p1.name << " " << p1.population << " " << p1.g << endl;
if (finout.eof())
finout.clear(); //清楚eof标志
memcpy(p1.name, "Name1", sizeof("Name1"));
p1.population = 66.0;
p1.g == 55.0;
finout.seekp(place);
finout.write((char *)&p1, sizeof p1) << flush;
if (finout.fail())
{
cerr << "error attempted write\n";
system("pause");
exit(EXIT_FAILURE);
}
/*显示修改后的文件内容*/
ct = 0;
finout.seekg(0);
cout << "\n\nshow revised file\n";
while (finout.read((char *) &p1,sizeof p1))
{
cout << ct++ << " " << p1.name << " " << p1.population << " " << p1.g << endl;
}
system("pause");
return 0;
}
2.2输出结果如下图所示
参考内容:
《C++ Primer Plus》(第6版)中文版 773-787页(参考:文件模式)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139917.html原文链接:https://javaforall.cn
相关文章
- C++文件读写操作分析文本文件与二进制文件
- C++输入输出文件流[通俗易懂]
- C++ 分区、文件夹大小获取、文件数据操作demo示例
- 实战中遇到的C++流文件重置的一个大陷阱 为什么ifstream的seekg函数无效
- 【贪玩巴斯】C/C++文件IO流操作的 seekp和seekg详解「建议收藏」
- C++从键盘输入多行数据
- c++利用mutex(互斥量)实现多线程「建议收藏」
- C++使用eigen库做本征分解(eigendecomposition)
- [链表]leetcode725-分隔链表(C++)
- 判断DLL文件是C/C++动态链接库还是.NET程序集及查看DLL依赖
- C++的构造函数的关键字
- Linux C++ 遍历文件夹
- C++字符串加密_c++字符串连接函数
- C/C++ Qt 运用JSON解析库 [解析篇]
- C/C++ 反汇编:分析类的实现原理
- C/C++ 文件与指针操作笔记
- 【C 语言】文件操作 ( 文件加密解密 | 使用第三方 DES 加密解密库 | 头文件导入 | 兼容 C++ 语言 | 加密解密函数说明 )
- C++/Php/Python/Shell 程序按行读取文件或者控制台详解程序员
- C++ STL map删除键值对:erase()和clear()方法
- C++文件类(文件流类)有哪些?
- C++ STL标准库这么多排序函数,该如何选择?
- 一个更好的C++序列化/反序列化库Kapok
- c++中.dll与.lib文件的生成与使用的详解
- 深入C++中API的问题详解
- 基于C++list中erase与remove函数的使用详解
- C++类中的常数据成员与静态数据成员之间的区别
- C++非递归遍历磁盘文件和递归遍历磁盘文件的程序示例
- C++获取文件哈希值(hash)和获取torrent(bt种子)磁力链接哈希值
- C++指向函数的指针实例解析
- C++的头文件和实现文件详解