一个月前的东西了,漏了,现在补上。
怪不得感觉文件 *** 作很不熟悉。
文件 *** 作是一个很重要的内容,用来访问文件中的数据和改写文件中的内容。
文件 *** 作有其专属的头文件:
#include
文件中的数据有两种存在形式:
//文本文件 - 文件以文本的ASCII码存储在计算机中
//二进制文件 - 以文本的二进制形式存储在计算机中,用户一般不能直接读懂
三种 *** 作:
ofstream:写 *** 作 ifstream:读 *** 作 fstream:读写 *** 作
其基本知识如下:
//写文件
//1、包含头文件 - #include
// 2、创建流对象 - ofstream ofs;
// 3、打开文件 - ofs.open("文件路径",打开方式);
// 4、写数据 - ofs<<"写入的数据”;
// 5、关闭文件 - ofs.close();
// 打开方式:
// iso::in 为读文件而打开文件
// iso::out 为写文件而打开文件
// iso::ate 初始位置:文件尾
// iso::app 追加方式写文件
// iso::trunc 如果文件存在先删除,再创建
// iso::binary 二进制方式
//
// 文件打开方式可以配合使用,利用| *** 作符:用二进制方式写文件 ios::binary | ios::out
文本文件写文件:
void test01() { ofstream ofs; ofs.open("test.txt", ios::out);//为写文件而打开文件 ofs << "姓名:张三" << endl; ofs << "性别:男" << endl; ofs << "年龄:18" << endl; ofs.close(); }
读文件 :
//读文件 void test01() { ifstream ifs; //定义文件流对象 ifs.open("test.txt", ios::out); //以ios::out的方式打开此文件 if (!ifs.is_open())//判断文件是否打开成功 { cout << "文件打开失败" << endl; return; } //读数据 //第一种 //右移输入运算符 char buf[1024] = { 0 }; while (ifs >> buf) { cout << buf << endl; } //第二种 //getline函数,从文件中读取sizeof(buf)个字符到buf中 char buf[1024] = { 0 }; while (ifs.getline(buf,sizeof(buf))) { cout << buf << endl; } //第三种 string buf; while (getline(ifs,buf)) //getline函数,从ifs写入到buf中 { cout << buf << endl; } //第四种 char c; while ((c = ifs.get()) != EOF)//get函数每次只读一个字符 EOF - end of file { cout << c; } ifs.close();//关闭文件 }
二进制文件:
要用ios::out | ios::binary方式
写:
class Person { public: char m_Name[64]; int m_Age; }; void test01() { //ofstream ofs; //ofs.open("person.txt", ios::out | ios::binary); ofstream ofs("person.txt", ios::out | ios::binary);//上面两行代码的简化形式 Person p = { "张三",18 }; ofs.write((const char*)&p, sizeof(Person)); ofs.close(); }
读:
class Person { public: char m_Name[64];//姓名 int m_Age;//年龄 }; //读文件 //二进制方式读文件主要利用流对象调用成员函数read void test01() { //创建流对象 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(); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)