标准库
C++从文件读取流和向文件写入流都需要用到 C++ 中一个标准库 fstream。
直接在开头时引入
#include<iostream>
#include <fstream>
using namespace std;
在这个标准库中有三个数据类型:
通常流程和Java一样,创建流,使用流,关闭流。
1.读文件
1 判断文件是否存在:
ifstream fin;
fin.open(filePath);
if(!fin)
{
cout <<"no such file,please check the file name!\n";
}else{
cout<<"存在这样的文件!"<<endl;
}
fin.close();
2.判断是否为空
采取peek函数详解
ifstream fin;
fin.open(filePath);
if(fin.peek() == EOF)
{
cout <<"没有内容"<<endl;
}else{
cout<<"有内容哦。"<<endl;
}
fin.close();
3.读取全部内容
流的相互转换rdbuf()函数
ifstream fin;
fin.open(filePath);
ostringstream tmp;
tmp << fin.rdbuf();
string str = tmp.str();
cout<<str;
fin.close();
别忘了引入头文件:#include < sstream >
rdbuf()rdbuf()可以实现一个流对象指向的内容用另一个流对象来输出详解
2.写文件
写入内容
和将内容输出到控制台上的方式一样。
ofstream m_out("D:\\数据结构课设\\input.dat");
if (m_out.is_open()){
// cout<<"op"<<endl;//文件已经打开
m_out<<"大二下学期成绩单:\n";
m_out<<"班级中:\n";
m_out<<"共有"<<n1<<"名学生:";
for (int k = 0; k < student_number; ++k) {
if (k!=0) m_out<<",";
m_out<<students[k].name;
}
m_out<<"\n";
m_out<<"每名学生共有"<<n2<<"门课程:";
for (int l = 0; l < course_number; ++l) {
if (l!=0) m_out<<",";
m_out<<students[0].grades[l].Course_name;
}
m_out<<"\n 具体情况为\n";
for (int i = 0; i < student_number; ++i) {
m_out<<"学号:"<<students[i].ID<<" "<<"姓名:"<<students[i].name<<" 课程成绩为:\n";
for (int j = 0; j < students[i].courseNumber; ++j) {
m_out<<" "<<students[i].grades[j].Course_name<<":"<<students[i].grades[j].grade<<"\n";
}
}
m_out.close();
}