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函数,以二进制方式读数据
目录
相关文章
|
21天前
|
C++
C++的简单文本文件IO
C++的简单文本文件IO
|
7天前
|
存储 分布式数据库 API
技术好文:VisualC++查看文件被哪个进程占用
技术好文:VisualC++查看文件被哪个进程占用
|
22天前
|
存储 自然语言处理 安全
C++ STL标准库 《string原理与实战分析》
C++ STL标准库 《string原理与实战分析》
22 0
|
8天前
|
C++
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
11 0
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
|
10天前
|
C++ iOS开发 开发者
C++一分钟之-文件输入输出(I/O)操作
【6月更文挑战第24天】C++的文件I/O涉及`ifstream`, `ofstream`和`fstream`类,用于读写操作。常见问题包括未检查文件打开状态、忘记关闭文件、写入模式覆盖文件及字符编码不匹配。避免这些问题的方法有:检查`is_open()`、显式关闭文件或使用RAII、选择适当打开模式(如追加`ios::app`)以及处理字符编码。示例代码展示了读文件和追加写入文件的实践。理解这些要点能帮助编写更健壮的代码。
21 2
|
7天前
|
自然语言处理 C语言 C++
程序与技术分享:C++写一个简单的解析器(分析C语言)
程序与技术分享:C++写一个简单的解析器(分析C语言)
|
7天前
|
IDE 开发工具 C++
插件:CLion中使用C/C++ Single File Execution插件编译和运行单个文件
插件:CLion中使用C/C++ Single File Execution插件编译和运行单个文件
16 0
|
21天前
|
大数据 C++ 索引
C++ STL标准库 《vector向量原理与实战分析》
C++ STL标准库 《vector向量原理与实战分析》
19 0
|
1天前
|
编译器 C++
【C++】string类的使用④(字符串操作String operations )
这篇博客探讨了C++ STL中`std::string`的几个关键操作,如`c_str()`和`data()`,它们分别返回指向字符串的const char*指针,前者保证以&#39;\0&#39;结尾,后者不保证。`get_allocator()`返回内存分配器,通常不直接使用。`copy()`函数用于将字符串部分复制到字符数组,不添加&#39;\0&#39;。`find()`和`rfind()`用于向前和向后搜索子串或字符。`npos`是string类中的一个常量,表示找不到匹配项时的返回值。博客通过实例展示了这些函数的用法。
|
1天前
|
存储 C++
【C++】string类的使用③(非成员函数重载Non-member function overloads)
这篇文章探讨了C++中`std::string`的`replace`和`swap`函数以及非成员函数重载。`replace`提供了多种方式替换字符串中的部分内容,包括使用字符串、子串、字符、字符数组和填充字符。`swap`函数用于交换两个`string`对象的内容,成员函数版本效率更高。非成员函数重载包括`operator+`实现字符串连接,关系运算符(如`==`, `&lt;`等)用于比较字符串,以及`swap`非成员函数。此外,还介绍了`getline`函数,用于按指定分隔符从输入流中读取字符串。文章强调了非成员函数在特定情况下的作用,并给出了多个示例代码。