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函数,以二进制方式读数据
目录
相关文章
|
11天前
|
Ubuntu Linux Shell
C++ 之 perf+火焰图分析与调试
简介 在遇到一些内存异常的时候,经常这部分的代码是很难去进行分析的,最近了解到Perf这个神器,这里也展开介绍一下如何使用Perf以及如何去画火焰图。 1. Perf 基础 1.1 Perf 简介 perf是Linux下的一款性能分析工具,能够进行函数级与指令级的热点查找。利用perf剖析程序性能时,需要指定当前测试的性能时间。性能事件是指在处理器或操作系统中发生的,可能影响到程序性能的硬件事件或软件事件 1.2 Perf的安装 ubuntu 18.04: sudo apt install linux-tools-common linux-tools-4.15.0-106-gen
15 2
|
7天前
|
JavaScript 前端开发 测试技术
一个google Test文件C++语言案例
这篇文章我们来介绍一下真正的C++语言如何用GTest来实现单元测试。
9 0
|
1月前
|
存储 算法 C++
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
|
1月前
|
监控 编译器 C++
【代码讲解】【C/C++】获取文件最后修改的时间(系统时间)
【代码讲解】【C/C++】获取文件最后修改的时间(系统时间)
34 0
|
1月前
|
安全 C++ Windows
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
|
1月前
|
C++
C++通过文件指针获取文件大小
C++通过文件指针获取文件大小
24 0
|
2天前
|
编译器 C++
C++ 类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。
43 30
|
17天前
|
存储 编译器 C++
C ++初阶:类和对象(中)
C ++初阶:类和对象(中)
|
1月前
|
存储 安全 编译器
【C++】类和对象(下)
【C++】类和对象(下)
【C++】类和对象(下)
|
17天前
|
C++
C++(十六)类之间转化
在C++中,类之间的转换可以通过转换构造函数和操作符函数实现。转换构造函数是一种单参数构造函数,用于将其他类型转换为本类类型。为了防止不必要的隐式转换,可以使用`explicit`关键字来禁止这种自动转换。此外,还可以通过定义`operator`函数来进行类型转换,该函数无参数且无返回值。下面展示了如何使用这两种方式实现自定义类型的相互转换,并通过示例代码说明了`explicit`关键字的作用。