赞
踩
目录
程序运行产生的数据都是临时数据,程序结束就被释放
通过文件可以将数据持续化
-
C++中文件操作需要包含头文件 <fstream>
-
文件分为两种:
- 文本文件:以文本的 ASCII码 形式存储
- 二进制文件:以文本的 二进制 形式存储(用户不能直接读懂)
-
操作文件的三大类:
- ofstream --- 写操作(out file,从程序写入到文件)
- ifstream --- 读操作(in file,从文件写入程序)
- fstream --- 读写操作
步骤:
①、包含头文件
#include<fstream>
②、创建流对象
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;
-
- void test(){
- // 创建文件流对象
- ofstream ofs;
- // 打开文件
- ofs.open("text.txt", ios::out);
- // 写入文件
- ofs << "The hardest thing is to insist" << endl;
- // 关闭文件
- ofs.close();
- }
-
- int main() {
- test();
- system("pause");
- return 0;
-
- }
运行结果:
步骤(与写文件相似,但读取方式较多)
①、包含头文件
#include<fstream>
②、创建流对象
ifstream ifs;
③、打开文件并判断文件是否打开成功
ifs.open("文件路径", 打开方式);
④、读数据
四种读取方式
第一种方式:创建一个数组去接受从文件中读取的内容(空格读取不了)
- char buf[1024] = { 0 };
- while (ifs >> buf)
- {
- cout << buf << endl;
- }
第二种方式:ifs 有成员函数getline (获取一行) ,可以读取到空格
- char buf[1024];
- while (ifs.getline(buf, sizeof(buf))) // 参数:写入地址,写入大小
- {
- cout << buf << endl;
- }
第三种方式: 读到 string 中,需要用到头文件<string>里的函数getline
- string buf;
- while (getline(ifs, buf))
- {
- cout << buf << endl;
- }
第四种方式:创建一个字符变量,每次读一个字符,直到文件结尾(EOF)
- char c;
- while ((c = ifs.get()) != EOF) // end of file
- {
- cout << c;
- }
⑤、关闭文件
ifs.close();
补充:ifs.is_open() 判断文件是否打开,返回类型是 bool 打开失败返回 false,打开成功返回 true
以二进制的方式对文件进行读写操作
打开方式指定为:ios::binary
二进制方式写文件只要利用流对象调用成员函数 write
-
函数原型:ostream& write(const char* buffer, int len);
-
参数:字符指针 buffer 指向内存中的一段存储空间。len 是写的字节数
测试代码:
- #include<iostream>
- #include<fstream>
- using namespace std;
-
- class Person{
- public:
- char m_Name[64];
- int m_Age;
- };
-
- void test(){
- // 创建流对象,可以在创建时就指定打开方式
- // 二进制写入文件
- ofstream ofs("test.txt", ios::out | ios::binary);
-
- Person p = { "李华", 18 };
- // 写文件
- ofs.write((const char*)&p, sizeof(Person));
-
- // 关闭文件
- ofs.close();
- }
-
- int main() {
- test();
- system("pause");
- return 0;
- }
运行结果:
二进制方式读文件主要利用流对象调用成员函数 read
-
函数原型:istream& read (char* buffer, int len);
-
参数:字符串指针 buffer 指向内存中的一段存储空间。len 是读的字节数
测试代码:
- #include<iostream>
- #include<fstream>
- using namespace std;
-
- class Person{
- public:
- char m_Name[64];
- int m_Age;
- };
-
- void test(){
- // 创建流对象,二进制读取文件
- ifstream ifs("test.txt", ios::out | ios::binary);
- // 判断是否打开成功
- if ((ifs.is_open()) == false)
- {
- cout << "文件打开失败" << endl;
- return; // 打开失败结束
- }
-
- Person p;
- //读文件
- ifs.read((char*)&p, sizeof(Person));
- cout << p.m_Name << endl;
- cout << p.m_Age << endl;
- //关闭文件
- ifs.close();
- }
-
- int main() {
- test();
- system("pause");
- return 0;
- }
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。