无论是读还是写文件都必须要包含头文件 fstream 。
读写文件都有相同的步骤:
创建流对象,打开文件(判断一下是否打开成功),对文件进行读/写操作,关闭文件。
写文件:
ofstream Sy_sy;//创建流对象
Sy_sy.open("D:\\CLionProjects\\C++代码文件操作存放点\\sy001.txt",ios::out);//out 为写文件而打开文件,in 为读文件而打开文件
//打开文件的路径要用绝对路径
if(!Sy_sy.is_open())
{
cout<<"文件打开失败!"<<endl;
return;
}
string s;
cout<<"开始向文件中输出内容,输入 EOF 结束输入!"<<endl;
while(getline(cin,s))
{
if (s == "EOF")
{
cout<<"输入结束!"<<endl;
break;
}
Sy_sy<<s<<endl;
}
Sy_sy.close();//关闭文件
is_open函数判断文件是否打开成功,如果打开成功返回 true 否则 false;
如果文件路径那里直接写文件名,将会直接创建一个文件。
文件打开方式看下面:
读文件:
ifstream Sy_in;
Sy_in.open("D:\\CLionProjects\\C++代码文件操作存放点\\sy001.txt",ios::in | ios::binary);//打开文件
if (!Sy_in.is_open())//检查文件是否打开成功 //可以利用这个操作同时指定多个模式
{
cout<<"文件打开失败!请检查文件路径!"<<endl;
return;
}
string s;
while (getline(Sy_in,s))//第一种方法更为简单
{
cout<<s<<endl;
}
char buf[1024] = {0};
while (Sy_in >> buf )//第二种方法利用右移运算符把内容放到 buf中去
{
cout<<buf<<endl;
}
while (Sy_in.getline(buf,sizeof(buf)))//第三种方法
{
cout<<buf<<endl;
}
char c;
while ( (c =Sy_in.get()) != EOF )//第四种方法 EOF 就是文件尾的意思
{
cout<<c;
}
Sy_in.close();
读文件这里介绍了四种方式,找一个自己喜欢的方式就行了。
利用二进制方式读写文件会有些不一样(注意如果用二进制方式写文件,写进文件里面的内容可能会是乱码,但是是正常的)
//二进制写文件
class person{
public :
char name[64];
int age;
};
//写文件
void test01(){
ofstream ofs;
ofs.open("D:\\CLionProjects\\C++代码文件操作存放点\\sy002.txt",ios::out | ios::binary);//打开文件
person p = {"张三", 18};
ofs.write((const char *)&p, sizeof (person));
ofs.close();
}
//读文件
void test02(){
ifstream ofs;
ofs.open("D:\\CLionProjects\\C++代码文件操作存放点\\sy002.txt",ios::in | ios::binary);//打开文件
if (!ofs.is_open())
{
cout<<"文件打开失败"<<endl;
return ;
}
person p;
ofs.read((char *)&p, sizeof (person));
cout<<p.name<<" "<<p.age<<endl;//输出读到的内容
ofs.close();
}
听课的时候有个注意点,利用二进制方式读写文件,最好用 C 语言的字符串进行操作,用C++的string 可能会出问题。