C++文件操作
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化。
头文件:<fstream>
文件类型分为两种:
1、文本文件:文件以文本的ASCII码形式存储在计算机中;
2、二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们。
操作文件三大类:
1、ofstream:写操作;
2、ifstream:读操作;
3、fstream:读写操作。
文本文件
写文件
1、包含头文件
#include <fstream>;
2、创建流对象
ofstream ofs;
3、打开文件
ofs.open("文件路径",打开方式);
4、写数据
ofs<<"写入的数据";
5、关闭文件
ofs.clase();
#include <iostream> using namespace std; #include <fstream> //文本文件 写文件 void test1() { //1、包含头文件 //2、创建流对象 ofstream ofs; //3、指定打开方式 ofs.open("test.txt", ios::out); //4、写内容 ofs << "姓名:张三" << endl; ofs << "性别:男" << endl; ofs << "年龄:18" << endl; //5、关闭文件 ofs.close(); } int main() { test1(); system("pause"); return 0; }程序运行后,文件默认创建在项目路径下。
读文件
1、包含头文件
#include <fstream>;
2、创建流对象
#ifstream ifs;
3、打开文件并判断文件是否打开成功
ifs,open("文件路径",打开方式);
4、读数据
四种方式读取
5、关闭文件
ifs.close();
#include <iostream> using namespace std; #include <fstream> #include <string> void test1() { //1、包含头文件 //2、创建流对象 ifstream ifs; //3、打开文件 ifs.open("test.txt", ios::in); if (!ifs.is_open()) { 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) { cout << c; }*/ //5、关闭文件 ifs.close(); } int main() { test1(); system("pause"); return 0; }
二进制文件
以二进制的方式对文件进行读写操作
打开方式要指定为 ios::binary
写文件
二进制方式写文件主要利用流对象调用成员函数write
函数原型:ostream write(const char* buffer, int len);
参数:字符指针buffer指向内存中一段存储空间,len是读写的字节数。
#include <iostream> using namespace std; #include <fstream> //写文件 class Person { public: char m_Name[64]; int m_Age; }; void test1() { //头文件 //创建流对象 ofstream ofs("person.txt", ios::out | ios::binary); //打开文件 //ofs.open("person.txt", ios::out | ios::binary); //写文件 Person p = { "张三", 18 }; ofs.write((const char*)&p, sizeof(Person)); //关闭文件 ofs.close(); } int main() { test1(); system("pause"); return 0; }
读文件
主要利用流对象调用成员函数read
函数原型:istream& read(char* buffer, int len);
#include <iostream> using namespace std; #include <fstream> class Person { public: char m_Name[64]; int m_Age; }; void test2() { ifstream ifs; ifs.open("person.txt", ios::in | ios::binary); if (!ifs.is_open()) { cout << "文件打开失败" << endl; return; } Person p; ifs.read((char*)&p, sizeof(Person)); cout << "姓名:" << p.m_Name << "年龄:" << p.m_Age << endl; ifs.close(); } int main() { test2(); system("pause"); return 0; }