首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++ fstream文件流读写文件操作详解

C++ fstream文件流读写文件操作详解

作者头像
horsley
发布于 2022-08-16 02:43:05
发布于 2022-08-16 02:43:05
2.9K00
代码可运行
举报
运行总次数:0
代码可运行

要求:

掌握文本文件读写的方法 了解二进制文件的读写方法C++文件流: fstream  // 文件流 ifstream  // 输入文件流 ofstream  // 输出文件流

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//创建一个文本文件并写入信息 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//同向屏幕上输出信息一样将信息输出至文件 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<iomanip.h> 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<fstream.h> 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main() 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ofstream f1("d://me.txt"); //打开文件用于写,若文件不存在就创建它 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(!f1)return; //打开文件失败则结束运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 f1<<setw(20)<<"姓名:"<<"廉东方"<<endl; //使用插入运算符写文件内容
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f1<<setw(20)<<"家庭地址:"<<"河南郑州"<<endl; f1.close(); //关闭文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
}

运行后打开文件d:/me.txt,其内容如下: 姓名:廉东方 家庭地址:河南郑州文件操作: 打开文件 文件名 注意路径名中的斜杠要双写,如: “D://MyFiles//ReadMe.txt” 文件打开方式选项: ios::in    = 0x01, //供读,文件不存在则创建(ifstream默认的打开方式) ios::out    = 0x02, //供写,文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式) ios::ate    = 0x04, //文件打开时,指针在文件最后。可改变指针的位置,常和in、out联合使用 ios::app    = 0x08, //供写,文件不存在则创建,若文件已存在则在原文件内容后写入新的内容,指针位置总在最后 ios::trunc   = 0x10, //在读写前先将文件长度截断为0(默认) ios::nocreate = 0x20, //文件不存在时产生错误,常和in或app联合使用 ios::noreplace = 0x40, //文件存在时产生错误,常和out联合使用 ios::binary  = 0x80  //二进制格式文件 文件保护方式选择项: filebuf::openprot;   //默认的兼容共享方式 filebuf::sh_none;    //独占,不共享 filebuf::sh_read;    //读共享 filebuf::sh_write;   //写共享 打开文件的方法 调用构造函数时指定文件名和打开模式 ifstream f(“d://12.txt”,ios::nocreate);         //默认以 ios::in 的方式打开文件,文件不存在时操作失败 ofstream f(“d://12.txt”);                //默认以 ios::out的方式打开文件 fstream f(“d://12.dat”,ios::in|ios::out|ios::binary); //以读写方式打开二进制文件 使用Open成员函数 fstream f; f.open(“d://12.txt”,ios::out);             //利用同一对象对多个文件进行操作时要用到open函数 检查是否成功打开 成功: if(f){…}       //对ifstream、ofstream对象可用,fstream对象不可用。 if(f.good()){…} 失败: if(!f){…}       // !运算符已经重载 if(f.fail()){…} 读写操作 使用<<,>>运算符 只能进行文本文件的读写操作,用于二进制文件可能会产生错误。 使用函数成员 get、put、read、write等 经常和read配合使用的函数是gcount(),用来获得实际读取的字节数。 读写二进制文件注意事项 打开方式中必须指定ios::binary,否则读写会出错 用read/write进行读写操作,而不能使用插入、提取运算符进行操作,否则会出错。 使用eof()函数检测文件是否读结束,使用gcount()获得实际读取的字节数 关闭文件 使用成员函数close,如: f.close(); 利用析构函数 对象生命期结束时会检查文件是否关闭,对没有关闭的文件进行关闭操作。 随机读写文件 通过移动文件读写指针,可在文件指定位置进行读写。 seekg(绝对位置);      //绝对移动,    //输入流操作 seekg(相对位置,参照位置);  //相对操作 tellg();          //返回当前指针位置 seekp(绝对位置);      //绝对移动,    //输出流操作 seekp(相对位置,参照位置);  //相对操作  tellp();          //返回当前指针位置 参照位置: ios::beg  = 0       //相对于文件头 ios::cur  = 1       //相对于当前位置 ios::end  = 2       //相对于文件尾 读写文本文件的示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//为能够正确读出写入文件的各数据,各数据间最好要有分隔 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<fstream.h> 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main() { 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fstream f("d://try.txt",ios::out); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f<<1234<<' '<<3.14<<'A'<<"How are you"; //写入数据 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f.close();
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f.open("d://try.txt",ios::in); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int i; double d; char c; char s[20]; 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f>>i>>d>>c; //读取数据 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f.getline(s,20); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cout<<i<<endl; //显示各数据 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cout<<d<<endl; 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cout<<c<<endl; 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cout<<s<<endl; 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f.close(); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
}

运行结果: 1234 3.14 A How are you Press any key to continue 显示文本文件的内容 //使用get()一次读一个字符——————————–方案一

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<fstream.h> 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main() 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ifstream fin("d://简介.txt",ios::nocreate);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 if(!fin){ 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cout<<"File open error!/n"; return; 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
} 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char c; 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while((c=fin.get())!=EOF)cout<<c; //注意结束条件的判断 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fin.close(); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
}

//使用get(char *,int n,char delim=’/n’)一次读多个字符—-方案二 //巧妙利用文本文件中不会有字符’/0’的特点进行读取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<fstream.h> 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main() 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ifstream fin("d://简介.txt",ios::nocreate); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(!fin){ cout<<"File open error!/n"; return; } 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char c[80]; 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while(fin.get(c,80,'/0')!=NULL)cout<<c; //注意结束条件的判断 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fin.close(); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
}

//使用read(char *,int n)读文件—————————方案三

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<fstream.h> 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main() { 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ifstream fin("d://简介.txt",ios::nocreate); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(!fin){ cout<<"File open error!/n"; return; } 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char c[80]; 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while(!fin.eof()) //判断文件是否读结束 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fin.read(c,80); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cout.write(c,fin.gcount()); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
} 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fin.close(); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
}

拷贝文件 //二进制文件操作示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<fstream.h> 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main() { 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ifstream fin("C://1.exe",ios::nocreate|ios::binary);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(!fin){ cout<<"File open error!/n"; return; } 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ofstream fout("C://2.exe",ios::binary); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char c[1024]; 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while(!fin.eof()) 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fin.read(c,1024); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fout.write(c,fin.gcount()); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
} 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fin.close(); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fout.close(); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cout<<"Copy over!/n"; 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011 年 6 月 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
fstream的用法_fun 的用法
在C++中输入输出到指定文件,或者从指定文件中读出数据使用fstream类较为方便。
全栈程序员站长
2022/10/02
3.7K0
从零开始学C++之IO流类库(二):文件流(fstream, ifstream, ofstream)的打开关闭、流状态
s1mba
2017/12/28
3.5K0
从零开始学C++之IO流类库(二):文件流(fstream, ifstream, ofstream)的打开关闭、流状态
c++ fstream + string 处理大数据
起因 (1)之前处理文本数据时,各种清洗数据用的都是java的File,FileReader/FileWriter,BufferedReader/BufferedWriter等类,详见java读写文件 (2)应用java的原因是java里面的map非常灵活,eclipse编译器更是给力,而且ctrl可以追踪函数等,详见java map的排序 (3)应用java的另一个原因是java里面的string类的字符串处理非常灵活,各种函数是应用尽有。 (4)上面两点算是自己的误解吧,因为c++里面也有也有与之对应
CSDN技术头条
2018/02/08
2.5K0
c++ fstream + string 处理大数据
【C++】输入输出流 ⑨ ( 文件流 | 文件输入输出流 | 继承结构 | 文件输入输出流对象 | 文件打开与关闭 | 创建文件流对象同时指定参数打开文件 | 调用文件流 open 函数打开文件 )
文件 IO 流 , 主要定义在 fstream.h 头文件中 , 该头文件中定义了以下三个类 :
韩曙亮
2023/12/13
7220
【C++】输入输出流 ⑨ ( 文件流 | 文件输入输出流 | 继承结构 | 文件输入输出流对象 | 文件打开与关闭 | 创建文件流对象同时指定参数打开文件 | 调用文件流 open 函数打开文件 )
c++读写文件的几种方法_include有什么用
在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:
全栈程序员站长
2022/11/04
1.4K0
c++读写文件的几种方法_include有什么用
c++那些事儿7.0 I/O流,文件操作
知识点综述: ---- C++ I/O: 在iostream头文件中定义 istream //通用输入流和其它输入流基类。 ostream //通用输出流和其它流基类。 iostream //通用输入输出流和其它输入输出流基类。 在fstream头文件中定义 ofstream //文件写操作 内存写入存储设备 ifstream //文件读操作,存储设备读区到内存中
热心的社会主义接班人
2018/04/27
1.8K0
c++那些事儿7.0 I/O流,文件操作
C/C++读写文本文件、二进制文件「建议收藏」
1. C语言读写文件均通过FILE指针执行操作,其中文本文件的读写用fprintf,fscanf,二进制文件的读写用fread,fwrite
全栈程序员站长
2022/09/05
2.7K0
c++ 文件操作详解
C++ 通过以下几个类支持文件的输入输出: ofstream: 写操作(输出)的文件类 (由ostream引申而来) ifstream: 读操作(输入)的文件类(由istream引申而来) fstream: 可同时读写操作的文件类 (由iostream引申而来) 打开文件(Open a file) 对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也就是说打开一个文件。被打开的文件在程序中由一个流对象(stream object)来表示 (这些类的一个实例) ,而对这个流对象所做的任何
拾点阳光
2018/05/10
2K0
C++017-C++文件读写应用
在线练习: http://noi.openjudge.cn/ https://www.luogu.com.cn/
IT从业者张某某
2023/10/16
7570
C++017-C++文件读写应用
C++ IO流_数据的旅行之路
程序中的数据总是在流动着,既然是流动就会有方向。数据从程序的外部流到程序内部,称为输入;数据从程序内部流到外部称为输出。
一枚大果壳
2022/09/16
9180
从零开始学C++之IO流类库(三):文件的读写、二进制文件的读写、文件随机读写
文章主要讲述了C++流和文件操作的相关内容。包括标准I/O流、自定义I/O流、文件操作、文件的随机读写以及文件指针的移动。
s1mba
2017/12/28
3.3K0
C++ fstream详解[通俗易懂]
C语言里面对文件的操作是通过文件指针,以及一些相关的函数,那么C++中是如何对文件进行操作的呢?没错,就是通过 fstream 这个文件流来实现的。当我们使用#include 时,我们就可以使用其中的 ifstream,ofstream以及fstream 这三个类了(ofstream是从内存到硬盘,ifstream是从硬盘到内存),也就可以用这三个类来定义相应的对象了,这三个类分别代表一个输入文件,一个输出文件,以及一个输入输出文件。Ifstream类支持>>操作符,ofstream类支持<<操作符,fstream类同时支持>>和<<操作符。
全栈程序员站长
2022/11/05
2.2K0
c++输入文件流ifstream用法详解
每个IO 对象都维护一组条件状态 flags (eofbit, failbit and badbit),用来指出此对象上是否可以进行 IO 操作。如果遇到错误—例如输入流遇到了文件末尾,则对象的状态变为是失效,所有的后续输入操作都不能执行,直到错误纠正。
全栈程序员站长
2022/07/02
2.1K0
c++输入文件流ifstream用法详解
C++中fstream_在使用中
C++中处理文件类似于处理标准输入和标准输出。类ifstream、ofstream和fstream分别从类 istream、ostream和iostream派生而来。作为派生的类,它们继承了插入和提取运算符(以及其他成员函数),还有与文件一起使用的成员和构造函数。可将文件<fstream> 包括进来以使用任何fstream。如果只执行输入,使用ifstream类;如果只执行输出,使用 ofstream类;如果要对流执行输入和输出,使用fstream类。可以将文件名称用作构造函数参数。
全栈程序员站长
2022/10/02
6.9K0
C++中fstream_在使用中
C++文件读写操作分析文本文件与二进制文件
ios::app 与 ios::ate 的区别主要在多线程写文件时有区别,ios::app:第一个线程(进程)往里面写了个d,第二个线程(进程)写了个e的话,结果是abcde
CtrlX
2022/09/23
6890
f stream_fstream
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;
全栈程序员站长
2022/09/29
5800
C++中文件的读写
通过文件,可以将数据持久化。C++ 中对文件的操作需要包含头文件<fstream>。 文本文件,以文本的ASCII码的形式存储在计算机中。 二进制文件,以二进制的形式存储在计算机中,用户一般无法直接阅读。 操作文本的3个类:ofstream,写操作;ifstream,读操作;fstream,读写操作。
耕耘实录
2022/05/09
9390
【C++】输入输出流 ⑩ ( 文件流 | 文件流打开方式参数 | 文件指针 | 组合打开方式 | 文件打开失败 )
文件指针引入 : 使用 输入 / 输出 文件流 打开文件后 , 都有一个文件指针 指向 默认的 文件位置 ;
韩曙亮
2023/12/13
5100
c++中ifstream及ofstream超详细说明
前文说过,ifstream是继承于istream,ofstream是继承于ostream,fstream是继承于iostream类,而他们使用的缓冲区类是filebuf。
cpp加油站
2021/05/14
2.4K0
[C++][IO]fstream用法
void open(const char* filename,int mode,int access);
静默虚空
2022/05/07
9970
推荐阅读
相关推荐
fstream的用法_fun 的用法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档