输入-输出流:
文章目录
ios::in | 读文件 |
---|---|
ios::out | 为写文件而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 追加方式写文件 |
ios::trunc | 如果文件存在先删除,再创建 |
ios::binary | 二进制方式 |
❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️
1. 写文件
o 首先要使用头文件
** **#include<fstream>**
-
创建流对象
ofstream ofs;
-
指定打开方式 **–可以写绝对路径或者相对路径
ofs.open("test.txt",ios::out);
-
写内容
ofs<<"姓名:"<<endl;
-
关闭文件
ofs.close();
2. 读文件
o 创建流对象**
ifstream ifs;**
- 打开文件,判断文件是否打开成功
ifs.open("文件路径",打开方式);
if(!ifs.is_open())
{
cout<<"文件打开失败"<<endl;
return;
}
第一种:
char buf[1024] = { 0 };
//定义字符数组
while(ifs >> buf)
{
cout << buf <<endl;
}
第二种:
char buf[1024] = { 0 };
//getline获取,sizeof统计字符长度
while(ifs.getline(buf,sizeof(buf)))
{
cout << buf <<endl;
}
第三种
//使用string --需要包含string头文件
while ( getline( ifs,buf ))
{
cout<< buf <<endl;
}
第四种:不推荐 --依次读取字符
char c;
while (( c=ifs.get())!=EOF)
{ //eof是文件尾部的标志
cout<<c;
}
总结:
\1. 读文件可以使用ifstream,或者fstream类
\2. 利用is_open函数判断文件是否打开成功
\3. close关闭文件
代码:
#include<iostream>
#include<fstream> //包含头文件
using namespace std;
//文本文件 读文件
void test01()
{
//创建流对象
ifstream ifs;
//打开文件
ifs.open("/c/cpp/tar.cpp",ios::in);
if(!ifs.is_open())
{
cout<<"文件打开失败"<<endl;
return ;
}
char buf[1024] = { 0 };
//定义字符数组
while(ifs >> buf)
{
cout << buf <<endl;
}
ifs.close(); //关闭文件
}
int main()
{
test01();
return 0;
}
3 . 以二进制形式对文件进行读取操作
- 打开的文件会出现乱码
- 也可以通过加密方式保护文件
- 打开方式要指定为 ios::binary
代码:
#include<fstream>
#include<iostream>
using namespace std;
//二进制写文件
class Person
{
public:
char m_Name[64];
int m_Age;
};
void test01()
{
//创建流对象
ofstream ofs;
//打开文件 //用二进制打开方式要指定为 ios::binary
ofs.open("/c/cpp/tar.cpp",ios::out | ios::binary);
//写文件
Person p ={"张三",18};
ofs.write((const char *)&p,sizeop(Person));
//由于&p取地址是person类型,所以要强制转换为char
//关闭文件
ofs.close();
}
int main()
{
test01();
return 0;
}