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

简介: 文本文件写文件 写文件步骤如下:1. 包含头文件 #include <fstream>2. 创建流对象 ofstream ofs;3. 打开文件ofs.open("文件路径",打开方式);4. 写数据ofs << "写入的数据";5. 关闭文件ofs.close();文件打开方式:打开方式解释ios::in为读文件而打开文件ios::out为写文件而打开文件ios::ate初始位置:文件尾ios::app追加方式写文件ios::trunc如果文件存在先删除,再创建ios::binary二进制方式



文本文件

写文件

  写文件步骤如下:

  1. 包含头文件  
    #include <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::app 与 ios::ate 的区别主要在多线程写文件时有区别,ios::app:第一个线程(进程)往里面写了个d,第二个线程(进程)写了个e的话,结果是abcde

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

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

示例:

#include <fstream>

voidtest01()

{

   ofstreamofs;

   ofs.open("test.txt", ios::out);

   ofs<<"姓名:张三"<<endl;

   ofs<<"性别:男"<<endl;

   ofs<<"年龄:18"<<endl;

   ofs.close();

}

intmain() {

   test01();

   system("pause");

   return0;

}

总结:

  • 文件操作必须包含头文件 fstream
  • 读文件可以利用 ofstream  ,或者fstream类
  • 打开文件时候需要指定操作文件的路径,以及打开方式
  • 利用<<可以向文件中写数据
  • 操作完毕,要关闭文件

5.1.2读文件

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

读文件步骤如下:

  1. 包含头文件  
    #include <fstream>
  2. 创建流对象  
    ifstream ifs;
  3. 打开文件并判断文件是否打开成功
    ifs.open("文件路径",打开方式);
  4. 读数据
    四种方式读取
  5. 关闭文件
    ifs.close();

示例:

#include <fstream>

#include <string>

voidtest01()

{

   ifstreamifs;

   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;

   //}

   charc;

   while ((c=ifs.get()) !=EOF)//EOF end of file效率低,一个字符一个字符读取

   {

       cout<<c;

   }

   ifs.close();//勿忘关闭

}

intmain() {

   test01();

   system("pause");

   return0;

}

总结:

  • 读文件可以利用 ifstream  ,或者fstream类
  • 利用is_open函数可以判断文件是否打开成功
  • close 关闭文件

二进制文件

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

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

写文件

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

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

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

示例:

#include <fstream>

#include <string>

classPerson

{

public:

   charm_Name[64];

   intm_Age;

};

//二进制文件  写文件

voidtest01()

{

   //1、包含头文件

   //2、创建输出流对象

   ofstreamofs("person.txt", ios::out|ios::binary);

   

   //3、打开文件

   //ofs.open("person.txt", ios::out | ios::binary);

   Personp= {"张三"  , 18};

   //4、写文件

   ofs.write((constchar*)&p, sizeof(p));

   //5、关闭文件

   ofs.close();

}

intmain() {

   test01();

   system("pause");

   return0;

}

总结:

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

读文件

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

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

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

示例:

#include <fstream>

#include <string>

classPerson

{

public:

   charm_Name[64];

   intm_Age;

};

voidtest01()

{

   ifstreamifs("person.txt", ios::in|ios::binary);

   if (!ifs.is_open())

   {

       cout<<"文件打开失败"<<endl;

   }

   Personp;

   ifs.read((char*)&p, sizeof(p));

   cout<<"姓名: "<<p.m_Name<<" 年龄: "<<p.m_Age<<endl;

}

intmain() {

   test01();

   system("pause");

   return0;

}

  • 文件输入流对象 可以通过read函数,以二进制方式读数据
目录
相关文章
|
5天前
|
存储 C++
【C++面向对象——输入输出流】处理二进制文件(头歌实践教学平台习题)【合集】
本任务要求使用C++读取二进制文件并在每行前添加行号后输出到控制台。主要内容包括: 1. **任务描述**:用二进制方式打开指定文件,为每一行添加行号并输出。 2. **相关知识**: - 流类库中常用的类及其成员函数(如`iostream`、`fstream`等)。 - 标准输入输出及格式控制(如`cin`、`cout`和`iomanip`中的格式化函数)。 - 文件的应用方法(文本文件和二进制文件的读写操作)。 3. **编程要求**:编写程序,通过命令行参数传递文件名,使用`getline`读取数据并用`cout`输出带行号的内容。 4. **实验步骤**:参考实验指
23 5
|
11天前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
2月前
|
Ubuntu Linux Shell
C++ 之 perf+火焰图分析与调试
【11月更文挑战第6天】在遇到一些内存异常的时候,经常这部分的代码是很难去进行分析的,最近了解到Perf这个神器,这里也展开介绍一下如何使用Perf以及如何去画火焰图。
113 5
|
3月前
|
Ubuntu Linux Shell
C++ 之 perf+火焰图分析与调试
【10月更文挑战第8天】在遇到一些内存异常的时候,经常这部分的代码是很难去进行分析的,最近了解到Perf这个神器,这里也展开介绍一下如何使用Perf以及如何去画火焰图。
|
3月前
|
Linux C++
Linux c/c++文件的基本操作
在Linux环境下使用C/C++进行文件的基本操作,包括文件的创建、写入、读取、关闭以及文件描述符的定位。
34 0
Linux c/c++文件的基本操作
|
3月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
76 0
|
3月前
|
Linux C++
Linux c/c++文件移动
这篇文章介绍了在Linux环境下,使用C/C++语言通过命令方式和文件操作方式实现文件移动的方法。
107 0
|
5天前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
43 18
|
5天前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
31 13
|
5天前
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
22 5