目录
1.文本文件
1.1写文件
1.1.1相对路径写文件
#include<iostream>
using namespace std;
#include<fstream>//头文件
//文本文件 写文件
void test01()
{
//1.包含头文件 fstream
//2.创建流对象
ofstream ofs;//我起的名字是ofs,名字无所谓,随便起
//o-output 写,f-file 文件
//3.指定打开方式
ofs.open("text.txt", ios::out);
//不指定路径,默认和项目的路径一致,项目保存在哪,这个文件就保存在哪
//4.写内容
ofs << "姓名:张三" << endl;//换行
ofs << "性别:男" << endl;
ofs << "年龄:18" << endl;
//5.关闭文件
ofs.close();
}
int main()
{
test01();
system("pause");//按任意键继续
return 0;
}
1.1.2绝对路径写文件
C\C++编程中:相对路径+绝对路径 - 学习随笔记 - 博客园
#include<iostream>
using namespace std;
#include<fstream>//头文件
//文本文件 写文件
void test01()
{
//1.包含头文件 fstream
//2.创建流对象
ofstream ofs;//我起的名字是ofs,名字无所谓,随便起
//o-output 写,f-file 文件
//3.指定打开方式
//在D:\zhouj\Documents\Visual Studio test下建立text2.txt写法
ofs.open("D:\\zhouj\\Documents\\Visual Studio test\\text2.txt", ios::out);
//注意是两个\\
//4.写数据
ofs << "使用绝对路径写文件" << endl;
//5.关闭文件
ofs.close();
}
int main()
{
test01();
system("pause");//按任意键继续
return 0;
}
1.2读文件
#include<iostream>
using namespace std;
#include<fstream>//头文件
#include<string>
//文本文件 读文件
void test01()
{
//1.包含头文件<fstream>
//2.创建流对象
ifstream ifss;//名字随便起
//i-input,f-file
//3.打开文件 并且判断是否打开成功
ifss.open("text.txt", ios::in);
//ifss.is_open();//是否打开,打开成功返回真,打开失败返回假
if (!ifss.is_open())//等价于 if(ifss.is_open() == 0)
{
cout << "文件打开失败" << endl;
return;//打开失败不在往下进行
}
//4.读数据
//第一种
//这里的第一种方法是按照字符串为单位读取,以空格为分隔
//不会读换行符
/*
cout << "第一种读法" << endl;
char buf[1024] = { 0 };//自己起的数组大小,字符串
//不懂的可以看https://blog.csdn.net/qq_37891604/article/details/127990980
while (ifss >> buf)//一行一行的读,读到末尾,返回假,自动跳出循环
{
cout << buf << endl;
}
*/
//第一次就读完了,光标就在文件尾了,读不了第二次,所以需要把第一次注释了读第二次
/*
cout << "-----------------------" << endl;
cout << "第二种读法" << endl;
//一行一行的读有空格也没事
char buf2[1024]={0};
while (ifss.getline(buf2,sizeof(buf2)))
{
//一行一行的读,行里有空格没事
//换完一行就输出,但是不会读换行符,所以需要自己加endl
cout << buf2 << endl;
}
*/
/*
cout << "-----------------------" << endl;
cout << "第三种读法" << endl;
string buf3;
while (getline(ifss,buf3))//需要加string的头文件
{
//一行一行的读,行里有空格没事
//换完一行就输出,但是不会读换行符,所以需要自己加endl
cout << buf3 << endl;
}
*/
cout << "-----------------------" << endl;
cout << "第四种读法" << endl;
char c;
//get() 每次读一个字符
while ((c=ifss.get())!=EOF)//!=EOF,就是没有读到文件尾就一直读,EOF end of file
{
//将读的字符放到c里
cout << c;
//会读换行符,不需要自己加endl
}
//5.关闭文件
ifss.close();
}
int main()
{
test01();
system("pause");//按任意键继续
return 0;
}
2.二进制文件
2.1写文件
#include<iostream>
using namespace std;
#include<fstream>
//二进制文件 写文件
class Person
{
public:
char m_Name[64];//姓名
int m_Age;//年龄
};
void test01()
{
//1.包含头文件<fstream>
//2.创建流对象
ofstream ofs("person.txt", ios::out | ios::binary);
//3.打开文件
//ofs.open("person.txt", ios::out | ios::binary);
//4.写文件
Person p{ "张三", 18 };//像结构体赋值,结构体和类差不多,第一次见,记住叭
//C++中的结构体和类的唯一区别是访问权限和模板,
//结构体赋值的语法就是这样写的,因此类也能这样赋值
ofs.write((const char*)&p,sizeof(Person));
//(const char*)&p,对p取地址,返回的应该是Person*,强转成const char*
// 但是这个函数是需要const char*
//5.关闭文件
ofs.close();
}
int main()
{
test01();
system("pause");//按任意键继续
return 0;
}
2.2读文件
#include<iostream>
using namespace std;
#include<fstream>
//二进制文件 读文件
class Person
{
public:
char m_Name[64];
int m_Age;
};
void test01()
{
//1.包含头文件<fstream>
//2.创建流对象
ifstream ifs;
//3.打开文件 判断文件是否打开成功
ifs.open("person.txt", ios::in | ios::binary);
if (!ifs.is_open())
{
cout << "文件打开失败" << endl;
return;//文件打开失败就不读了,就return掉
}
//4.读文件
Person p;
ifs.read((char*)&p, sizeof(Person));
cout << "姓名:" << p.m_Name<<" "<< "年龄:" << p.m_Age << endl;
//5.关闭文件
ifs.close();
}
int main()
{
test01();
system("pause");//按任意键继续
return 0;
}