程序运行时所产生的数据都属于临时数据,程序一旦运行结束就会被释放。
通过文件可以将数据持久化
。C++中对文件 *** 作需要包含头文件
。
文件类型分为
文本文件
和二进制文件
。
文本文件:以文本的ASCII码形式存储在计算机中。
二进制文件:以文本的二进制形式存储在计算机中,用户一般不能直接读懂。
*** 作文件的三大类:ofstream(写 *** 作), ifstream(读 *** 作),fstream(读写 *** 作)。
文件打开方式文件打开方式可以配合使用,利用 | *** 作符。
打开方式 | 解释 |
---|---|
ios:in | 为读文件而打开文件 |
ios:out | 为写文件而打开文件 |
ios:ate | 初始位置:文件尾 |
ios:app | 追加方式写文件 |
ios:trunc | 如果文件存在,先删除,再创建 |
ios:binary | 二进制方式 |
步骤如下:
step1:包含头文件
step2:创建流对象
step3:打开文件
step4:写数据
step5:关闭文件
#include
#include //1、包含头文件
using namespace std;
void test01() {
//2、创建流对象
ofstream ofs;
//3、指定打开方式
ofs.open("test.txt", ios::out);
/*
* ios::in 为读文件而打开文件
* ios::out 为写文件而打开文件
* ios::ate 初始位置,文件尾部
* ios::app 追加方式写文件
* ios::trunc 如果文件存在,先删除,再创建文件
* ios::binary 二进制方式
*/
//4、写入内容
ofs << "这是一个写入文件的txt文件";
//5、关闭文件
ofs.close();
}
int main() {
test01();
system("pause");
return 0;
}
读文件
步骤如下:
step1:包含头文件
step2:创建流对象
step3:打开文件并判断文件是否打开成功
step4:读数据(四种方法)
step5:关闭文件
#include
#include //1、包含头文件
#include
using namespace std;
void test01() {
//2、创建流对象
ifstream ifs;
//3、打开文件,并且判断是否打开成功
ifs.open("test.txt", ios::in);
/*
* ios::in 为读文件而打开文件
* ios::out 为写文件而打开文件
* ios::ate 初始位置,文件尾部
* ios::app 追加方式写文件
* ios::trunc 如果文件存在,先删除,再创建文件
* ios::binary 二进制方式
*/
if (!ifs.is_open()) {
class="superseo">cout << "文件打开失败!" << endl;
return;
}
//4、读数据
//第一种方法,创建一个数组,依次存放文本内容
char buf[1024] = { 0 };
while (ifs >> buf) {
cout << buf << endl;
}
//第二种方法,创建一个数组,依次放入文本内容
//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) { //EOF = end of file 文件尾
// cout << c << endl;
//}
//5、关闭文件
ifs.close();
}
int main() {
test01();
system("pause");
return 0;
}
二进制文件
以二进制的方式对文件进行读写 *** 作,打开方式要指定为ios::binary
。
二进制方式写文件主要利用流对象调用成员函数write()
。
#include
#include //1、包含头文件
using namespace std;
class Person {
public:
char m_name[64]; //这里用char不用string是为了避免一些错误
int m_age;
};
void test01() {
//2、创建流对象
ofstream ofs("person.txt", ios::out | ios::binary); //本身的构造函数也可以打开文件
//3、打开文件
//ofs.open("person.txt",ios::out | ios::binary); //加上 ios::binary表示是二进制文件
//4、写入文件
Person p = {"张三",18};
ofs.write((const char*)&p,sizeof(Person)); //取p的地址,将它强转成const char*类型
//5、关闭文件
ofs.close();
}
int main() {
test01();
system("pause");
return 0;
}
读文件
二进制方式读文件主要利用流对象调用成员函数read()
。
#include
#include //1、包含头文件
using namespace std;
class Person {
public:
char m_name[64];
int m_age;
};
void test01() {
//2、创建流对象
ifstream ifs;
//3、打开文件 判断文件是否打开成功
ifs.open("person.txt", ios::in | ios::binary); //二进制文件加上ios::binary
if (!ifs.is_open()) {
cout << "文件打开失败!" << endl;
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;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)