文章目录
- 第五章:
- 5.文件操作
- 5.1 文本文件
- 5.1.1 写文件
- 5.1.2 读文件
- 5.2 二进制文件
- 5.2.1 写文件
- 5.2.2 读文件
第五章:
5.文件操作
作用:程序运行时产生的数据都是临时数据,程序运行结束后都会被释放,文件能将数据持久化。
对文件进行操作需要包含头文件
两种文件类型:
-
文本文件:以文本ASCII码形式存储在计算机里
-
二进制文件:以文本二进制形式存储在计算机里
操作文件的三大类:
-
ofstream 写操作
-
ifstream 读操作
-
fstream 读写操作
5.1 文本文件
5.1.1 写文件
步骤:
-
包含头文件:#include
-
创建流对象:ofstream ofs;
-
打开文件:ofs.open(“文件路径”, 打开方式);
-
写入数据:ofs << “写入的数据”
-
关闭文件:ofs.close();
文件打开方式:
打开方式 | 说明 |
---|---|
ios::in | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios:ate | 初始位置为文件尾 |
ios::app | 追加方式写文件 |
ios::trunc | 如果文件存在会先删除,再创建 |
ios::binary | 二进制方式打开文件 |
文件打开方式可配合使用,用|操作符即可。
如用二进制方式写文件:ios::binary | ios::out
#include <iostream>
#include <fstream>
using namespace std;int main()
{ofstream ofs;ofs.open("text.txt", ios::out);ofs << "hello world" << endl;ofs << "hello C++" << endl;ofs.close();system("pause");return 0;
}
5.1.2 读文件
步骤:
-
包含头文件:#include
-
创建流对象:ifstream ifs;
-
打开文件并判断打开是否成功:ifs.open(“文件路径”,打开方式)
-
读取数据:四种方式,代码中会说明
-
关闭文件:ifs.close();
#include <iostream>
#include <fstream>
#include <string>
using namespace std;int main()
{ifstream ifs;ifs.open("text.txt", ios::in);if (!ifs.is_open()) //判断文件是否打开成功{cout << "打开文件失败!" << endl;return 0;}//读取数据//第一种方式/*char buf[1024] = { 0 };while (ifs >> buf){cout << buf << endl;}system("pause");*///第二种方式/*char buf[1024] = { 0 };while (ifs.getline(buf, sizeof(buf))){cout << buf << endl;}*///第三种方式/*string buf;while (getline(ifs, buf)){cout << buf << endl;}*///第四种方式char c;while ((c = ifs.get()) != EOF){cout << c;}ifs.close();return 0;
}
5.2 二进制文件
打开方式指定:ios::binary
5.2.1 写文件
二进制方式写文件可用流对象调用成员函数write
函数原型:ostream& write(const char * buffer, int len);
说明:字符指针buffer指向内存中一段存储空间。len是读写的字节数。
#include <iostream>
#include <fstream>
using namespace std;class Student
{
public:char name[20];int age;
};int main()
{ofstream ofs("stuInfo.txt", ios::out | ios::binary);Student s = { "小明", 18 };ofs.write((const char*)&s, sizeof(Student));ofs.close();system("pause");return 0;
}
5.2.2 读文件
二进制方式读文件可用流对象调用成员函数read
函数原型:istream& read( char * buffer, int len);
说明:字符指针buffer指向内存中一段存储空间。len是读写的字节数。
#include <iostream>
#include <fstream>
#include <string>using namespace std;class Student
{
public:char name[20] ;int age;
};int main()
{ifstream ifs;ifs.open("stuInfo.txt", ios::binary | ios::in);if (!ifs.is_open()){cout << "打开文件失败!" << endl;return 0;}Student s;ifs.read((char*)&s, sizeof(s));cout << "姓名:" << s.name << " 年龄:" << s.age << endl;ifs.close();system("system");return 0;
f(s));cout << "姓名:" << s.name << " 年龄:" << s.age << endl;ifs.close();system("system");return 0;
}