赞
踩
C++学习练习
之文件操作
程序运行时产生的数据都属于临时数据,程序一旦运行结束,都会被释放。
通过文件可以将数据持久化。
C++中对文件操作需要包含头文件 < fstream >
文件类型分为两种:
1、文本文件:文件以文本的ASCII码形式存储在计算机中。
2、二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们。
操作文件的三大类:
1、ofstream 写操作
2、ifstream 读操作
3、fstream 读写操作
写文件步骤:
1、包含头文件 : < fstream>
2、创建流对象 : ofstream ofs;
3、打开文件 : ofs.open(“文件路径”,打开方式);
4、写数据 : ofs << “写入的数据”;
5、关闭文件: ofs.close();
文件打开方式:
打开方式 | 解释 |
---|---|
ios::in | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 追加方式写文件 |
ios::trunc | 如果文件存在,先删除,再创建 |
ios::binary | 二进制方式 |
注意:文件打开方式可以配合使用,利用 | 操作符。
例如:用二进制方式写文件:’ ios::out | ios::binary ’
代码如下:
#include <iostream> using namespace std; #include <fstream> //文本文件 写文件 void test01(){ //1、包含头文件 fstream //2、创建流对象 ofstream ofs; //3、指定打开方式 ofs.open("data.txt",ios::out); //4、写内容 ofs << "姓名:达拉崩吧斑得贝迪卜多比鲁翁" << endl; ofs << "性别:男" << endl; ofs << "年龄:18" << endl; //5、关闭文件 ofs.close(); } int main(){ test01(); system("pause"); return 0; }
其中, ofs.open(“data.txt”,ios::out); 如果文件路径可以是绝对路径和相对路径,这里用的是相对路径,运行完毕后,会在该代码路径下创建一个 data.txt 文件。
读文件步骤:
1、包含头文件 : < fstream>
2、创建流对象 : ifstream ifs;
3、打开文件并判断文件是否打开成功 : ifs.open(“文件路径”,打开方式);
4、读数据 : 四种方式读取(代码中体现)
5、关闭文件: ofs.close();
代码如下:
#include <iostream> using namespace std; #include <fstream> #include <string> //文本文件 读文件 void test01(){ //1、包含头文件 //2、创建流对象 ifstream ifs; //3、打开文件 并且判断是否打开成功 ifs.open("data.txt",ios::in); if(!ifs.is_open()){ cout << "文件打开失败" << endl; return; } //4、读数据 //第一种 // char buff[1024] = {0}; // while (ifs >> buff){ // cout << buff << endl; // } //第二种 // char buff[1024] = {0}; // while (ifs.getline(buff,sizeof(buff))){ // cout << buff << endl; // } //第三种 // string buff; // while(getline(ifs,buff)){ // cout << buff << endl; // } //第四种 char c; while ((c = ifs.get()) != EOF){ //EOF end of file cout << c; } //5、关闭文件 ifs.close(); } int main(){ test01(); system("pause"); return 0; }
读文件的方式:
第一种:创建一个字符数组,初始化全为0.然后在while循环里将ifs中的数据利用右移运算符(<<)移到数组中。当(ifs >> buff)一行一行读到头之后会返回一个假的信息,结束循环。最后输出buff。
第二种:同样创建字符数组。利用ifs中的成员函数 ifs.getline(buff,sizeof(buff))1 一行一行获取数据存入到buff中。
第三种:利用string容器保存ifs的数据,利用全局函数getline(ifs,buff)2,将数据保存到buff中。
第四种:创建一个字符c,通过ifs中的get()方法,把字符读到c中,通过
((c = ifs.get()) != EOF) 判断有没有读到没见尾,然后,输出c
二进制方式写文件主要利用流对象调用成员函数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 test01(){ //1、包含头文件 //2、创建流对象 ofstream ofs("Person.txt",ios::out | ios::binary); //3、打开文件 // ofs.open("Person.txt",ios::out | ios::binary); //4、写文件 Person p = {"张三", 18}; ofs.write((const char *)&p, sizeof(Person)); //5、关闭文件 ofs.close(); } int main(){ test01(); system("pause"); return 0; }
二进制方式写文件主要利用流对象调用成员函数read
函数原型:
istream& read(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 test01(){ //1、包含头文件 //2、创建流对象 ifstream ifs; //3、打开文件 并且判断是否打开成功 ifs.open("Person.txt",ios::in | 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; }
https://www.bilibili.com/video/BV1et411b73Z?p=143
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。