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函数,以二进制方式读数据
目录
相关文章
|
29天前
|
Ubuntu Linux Shell
C++ 之 perf+火焰图分析与调试
【11月更文挑战第6天】在遇到一些内存异常的时候,经常这部分的代码是很难去进行分析的,最近了解到Perf这个神器,这里也展开介绍一下如何使用Perf以及如何去画火焰图。
|
2月前
|
存储 算法 搜索推荐
对二叉堆的简单分析,c和c++的简单实现
这篇文章提供了对二叉堆数据结构的简单分析,并展示了如何在C和C++中实现最小堆,包括初始化、插入元素、删除最小元素和打印堆的函数,以及一个示例程序来演示这些操作。
39 19
|
2月前
|
Ubuntu Linux Shell
C++ 之 perf+火焰图分析与调试
【10月更文挑战第8天】在遇到一些内存异常的时候,经常这部分的代码是很难去进行分析的,最近了解到Perf这个神器,这里也展开介绍一下如何使用Perf以及如何去画火焰图。
|
2月前
|
Linux C++
Linux c/c++文件的基本操作
在Linux环境下使用C/C++进行文件的基本操作,包括文件的创建、写入、读取、关闭以及文件描述符的定位。
21 0
Linux c/c++文件的基本操作
|
3月前
|
C++ 内存技术
[转]Visual C++内嵌swf文件并播放
[转]Visual C++内嵌swf文件并播放
|
2月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
55 0
|
2月前
|
Linux C++
Linux c/c++文件移动
这篇文章介绍了在Linux环境下,使用C/C++语言通过命令方式和文件操作方式实现文件移动的方法。
80 0
|
3月前
|
Linux API C++
超级好用的C++实用库之文件目录操作
超级好用的C++实用库之文件目录操作
37 0
|
15天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
25 2
|
21天前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
54 5