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函数,以二进制方式读数据
目录
相关文章
|
26天前
|
存储 算法 搜索推荐
对二叉堆的简单分析,c和c++的简单实现
这篇文章提供了对二叉堆数据结构的简单分析,并展示了如何在C和C++中实现最小堆,包括初始化、插入元素、删除最小元素和打印堆的函数,以及一个示例程序来演示这些操作。
31 19
|
15天前
|
Ubuntu Linux Shell
C++ 之 perf+火焰图分析与调试
【10月更文挑战第8天】在遇到一些内存异常的时候,经常这部分的代码是很难去进行分析的,最近了解到Perf这个神器,这里也展开介绍一下如何使用Perf以及如何去画火焰图。
21 1
|
22天前
|
Linux C++
Linux c/c++文件的基本操作
在Linux环境下使用C/C++进行文件的基本操作,包括文件的创建、写入、读取、关闭以及文件描述符的定位。
15 0
Linux c/c++文件的基本操作
|
2月前
|
C++ 内存技术
[转]Visual C++内嵌swf文件并播放
[转]Visual C++内嵌swf文件并播放
|
22天前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
34 0
|
22天前
|
Linux C++
Linux c/c++文件移动
这篇文章介绍了在Linux环境下,使用C/C++语言通过命令方式和文件操作方式实现文件移动的方法。
54 0
|
2月前
|
Linux API C++
超级好用的C++实用库之文件目录操作
超级好用的C++实用库之文件目录操作
28 0
|
14天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
19 4
|
14天前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
16 4
|
14天前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
14 1