在C++中与读取文件和写入文件简单操作有关的类分别有ifstream(文件读入)、ofstream(文件写出)、fstream (文件读入和写出)。
名称 | 作用 |
---|---|
ifstream | 文件读入 |
ofstream | 文件写出 |
fstream | 文件读入和写出 |
对于文件操作操作输入输出类中具有一个open的函数用来打开文件使用的。其原型为:
void open(const char* filename,int mode,int access);
其中各个参数的含义如下表:
参数 | 作用 |
---|---|
filename | 需要打开的文件地址名称 |
mode | 打开文件的方式 |
access | 打开文件的属性 |
其中打开文件的方式在类中ios中定义的常用值为下表,在使用过程中可以用“|”把以上属性连接起来表或的关系,如ios::out|ios::binary
mode常用的值 | 作用 |
---|---|
ios::app | 以追加的方式打开文件 |
ios::ate | 文件打开后定位到文件尾,ios:app就包含有此属性 |
ios::binary | 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文 |
ios::in | 文件以输入方式打开(文件数据输入到内存) |
ios::out | 文件以输出方式打开(内存数据输出到文件) |
ios::nocreate | 不建立文件,所以文件不存在时打开失败 |
ios::noreplace | 不覆盖文件,所以打开文件时如果文件存在失败 |
ios::trunc | 如果文件存在,把文件长度设为0 |
打开文件的属性取值是:
access常用的值 | 作用 |
---|---|
0 | 普通文件,打开访问 |
1 | 只读文件 |
2 | 隐含文件 |
4 | 系统文件 |
再打开文件的过程中,仅需要调用open函数就可以打开文件并对文件内容进行操作。如
查看代码
ofstream myfile("F:\\zmxs\\date.txt",ios::app);
myfile<<"写入!"<<endl;
myfile.close();
由上面可以看出在写入和写出时,用到了一个重要的运算符插入器(<<)。其实在stream类中存在两个重要的运算分别是插入器(<<)和析取器(>>)在c++中cin和cout经常可以被看到它主要实现的I/O操作。下面对插入器和析取器进行解释:
1、插入器(<<)
向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。
2、析取器(>>)
从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型的数据。
同时文件操作完成后需要对文件进行关闭,让文件进行保存。使用myfile.close();myfile为你定义这个操作名称。
使用者在操作O的时候,常常使用到文件指针,通俗来讲就是你在编辑文本文件时插入文本的位置,被称为文件指针。对文件指针的位置我们可以通过seekg函数进行操作
文件指针位置在c++中的用法:
seekg常用的值 | 含义 |
---|---|
ios::beg | 文件头 |
ios::end | 文件尾 |
ios::cur | 当前位置 |
举个栗子:
file.seekg(0,ios::beg); //让文件指针定位到文件开头
file.seekg(0,ios::end); //让文件指针定位到文件末尾
file.seekg(10,ios::cur); //让文件指针从当前位置向文件末方向移动10个字节
file.seekg(-10,ios::cur); //让文件指针从当前位置向文件开始方向移动10个字节
file.seekg(10,ios::beg); //让文件指针定位到离文件开头10个字节的位置
常用的错误判断方法:
good() 如果文件打开成功
bad() 打开文件时发生错误
eof() 到达文件尾
文件操作的代码解释
查看代码
#include<iostream>
#include <string>
#include<fstream>
#include<istream>
using namespace std;
int main()
{
ofstream outfile("F:\\zmxs\\date.txt",ios::app);
if(outfile.good())
{
outfile<<"写入!"<<endl;
outfile.close();
}
string temp;
ifstream myfile("F:\\zmxs\\date.txt");
///直接使用while会读取不到第一行
do
{
myfile >> temp;
cout<<temp<<endl;
}while(getline(myfile,temp));
myfile.close();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?