写点什么

C++ 文件读写操作分析文本文件与二进制文件

作者:CtrlX
  • 2022 年 8 月 23 日
    山东
  • 本文字数:1664 字

    阅读完需:约 5 分钟

C++文件读写操作分析文本文件与二进制文件

文本文件

写文件

写文件步骤如下:


  1. 包含头文件

  2. #include <fstream>

  3. 创建流对象

  4. ofstream ofs;

  5. 打开文件

  6. ofs.open("文件路径",打开方式);

  7. 写数据

  8. ofs << "写入的数据";

  9. 关闭文件

  10. ofs.close();


文件打开方式:



ios::app 与 ios::ate 的区别主要在多线程写文件时有区别,ios::app:第一个线程(进程)往里面写了个 d,第二个线程(进程)写了个 e 的话,结果是 abcde


注意: 文件打开方式可以配合使用,利用|操作符


**例如:**用二进制方式写文件 ios::binary | ios:: out


示例:


#include <fstream>
void test01(){ ofstream ofs; ofs.open("test.txt", ios::out);
ofs << "姓名:张三" << endl; ofs << "性别:男" << endl; ofs << "年龄:18" << endl;
ofs.close();}
int main() {
test01();
system("pause");
return 0;}
复制代码


总结:


  • 文件操作必须包含头文件 fstream

  • 读文件可以利用 ofstream ,或者 fstream 类

  • 打开文件时候需要指定操作文件的路径,以及打开方式

  • 利用<<可以向文件中写数据

  • 操作完毕,要关闭文件

5.1.2 读文件

读文件与写文件步骤相似,但是读取方式相对于比较多


读文件步骤如下:


  1. 包含头文件

  2. #include <fstream>

  3. 创建流对象

  4. ifstream ifs;

  5. 打开文件并判断文件是否打开成功

  6. ifs.open("文件路径",打开方式);

  7. 读数据

  8. 四种方式读取

  9. 关闭文件

  10. ifs.close();


示例:


#include <fstream>#include <string>void test01(){  ifstream ifs;  ifs.open("test.txt", ios::in);
if (!ifs.is_open())//is_open()返回类型为布尔 { cout << "文件打开失败" << endl; return; }
//第一种方式 //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; }
ifs.close();//勿忘关闭

}
int main() {
test01();
system("pause");
return 0;}
复制代码


总结:


  • 读文件可以利用 ifstream ,或者 fstream 类

  • 利用 is_open 函数可以判断文件是否打开成功

  • close 关闭文件

二进制文件

以二进制的方式对文件进行读写操作


打开方式要指定为 ==ios::binary==

写文件

二进制方式写文件主要利用流对象调用成员函数 write


函数原型 :ostream& write(const char * buffer,int len);


参数解释:字符指针 buffer 指向内存中一段存储空间。len 是读写的字节数


示例:


#include <fstream>#include <string>
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);
Person p = {"张三" , 18};
//4、写文件 ofs.write((const char *)&p, sizeof(p));
//5、关闭文件 ofs.close();}
int main() {
test01();
system("pause");
return 0;}
复制代码


总结:


  • 文件输出流对象 可以通过 write 函数,以二进制方式写数据

读文件

二进制方式读文件主要利用流对象调用成员函数 read


函数原型:istream& read(char *buffer,int len);


参数解释:字符指针 buffer 指向内存中一段存储空间。len 是读写的字节数


示例:


#include <fstream>#include <string>
class Person{public: char m_Name[64]; int m_Age;};
void test01(){ ifstream ifs("person.txt", ios::in | ios::binary); if (!ifs.is_open()) { cout << "文件打开失败" << endl; }
Person p; ifs.read((char *)&p, sizeof(p));
cout << "姓名: " << p.m_Name << " 年龄: " << p.m_Age << endl;}
int main() {
test01();
system("pause");
return 0;}
复制代码


  • 文件输入流对象 可以通过 read 函数,以二进制方式读数据

发布于: 19 小时前阅读数: 70
用户头像

CtrlX

关注

Pain is inevitable,suffering is optional 2022.08.01 加入

【个人网站】ctrlx.life 【联系方式】微信:gitctrlx 【软件技能】前端,C++,Python,研究网络工程,数据结构与算法。

评论

发布
暂无评论
C++文件读写操作分析文本文件与二进制文件_c_CtrlX_InfoQ写作社区