C++ ifstream ofstream

C++(3): std::ifstream的使用 为了便于对文件的操作,C++标准库中提供了文件输入输出流fstream,并提供了头文件。 fstream又细分了两个分支,分别是处理输入文件流的ifstream和处理输出文件流的ofstream。 ifstream负责将文件从硬盘读取至内存中。 ofstream负责将文件从内存写入硬盘中。 这两者所处理的文件流均包含二进制文件(binary)和文本文件(text)。 接下来我们将针对输入文件流ifstream用实际的例程介绍其使用方法。 阅读详情

C++文件读写详解(ofstream,ifstream,fstream)

 

 

1. 概述:

Input/Output library

C++输入输出流的继承关系如图:


1.  #include <fstream>  

2.  ofstream         //文件写操作 内存写入存储设备   

3.  ifstream         //文件读操作,存储设备读区到内存中  

4.  fstream          //读写操作,对打开的文件可进行读写操作

2. ofstream

Ø  头文件

#include<fstream>

 

Ø  继承关系


Ø  功能

文件写操作,内存写入存储设备

Ø  open()函数

成员函数open()实现打开文件的操作,从而将数据流和文件进行关联

几种比较常用的打开方式:

1)    

以输出的方式打开文件,若文件不存在建立文件,若文件存在将文件长度置为0

fstream fout;
fout.open("D:/1.txt",ofstream::out|ofstream::trunc);//
不能用||
if (!fout.is_open())

{
   return;//打开失败就返回
}

2)   以输出的方式打开文件,如果没有文件,那么生成空文件;如果有文件,那么清空该文件,写文件的时候是文件指针指向文件末尾(这个是写文件故将文件清空了)()
fout.open("D:/1.txt",ofstream::out|ofstream::ate);//不能用||(若是in则表示将文件的指针移动到文件末尾)
if (!fout.is_open())

{
return;
}

3)    

以输出方式打开文件,如果没有文件,那么生成空文件;如果有文件,那么在文件尾追加。写文件的时候是文件指针指向文件末尾
fout.open("D:/1.txt",ofstream::out|ofstream::app);//
不能用||
if (!fout.is_open())

{
  return;
}

 

打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:  
ios::app:   以追加的方式打开文件  
ios::ate:   文件打开后定位到文件尾,ios:app就包含有此属性  
ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文  
ios::in:    文件以输入方式打开(文件数据输入到内存)  
ios::out:   文件以输出方式打开(内存数据输出到文件)  
ios::nocreate: 不建立文件,所以文件不存在时打开失败  
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败  
ios::trunc:  如果文件存在,把文件长度设为0

Ø  示例程序

 

#include <fstream>      //std::ofstream

 

         int main () {

 

        std::ofstream ofs;

        ofs.open ("D:/1test.txt",std::ofstream::out | std::ofstream::app);

 

        ofs << "more lorem ipsum"<<end;;

 

        ofs.close();

 

        return0;

 

3. ifstream

Ø  继承关系


Ø  头文件

#include<fstream>

Ø  示例程序

 

// print the content of a text file.
#include <iostream>     // std::cout
#include <fstream>      // std::ifstream
 
int main () {
  std::ifstream ifs;
 
  ifs.open ("test.txt", std::ifstream::in);
 
  char c = ifs.get();
 
  while (ifs.good()) {
    std::cout << c;
    c = ifs.get();
  }
 
  ifs.close();
 
  return 0;
}

 

4. 二进制文件

1)     在二进制文件中,使用<< 和>>,以及函数(如getline)来操作符输入和输出数据,没有什么实际意义,虽然它们是符合语法的。

2)     文件流包括两个为顺序读写数据特殊设计的成员函数:write 和 read。第一个函数 (write) 是ostream 的一个成员函数,都是被ofstream所继承。而read 是istream 的一个成员函数,被ifstream 所继承。类 fstream 的对象同时拥有这两个函数。

3)     它们的原型是:

write ( char * buffer, streamsize size );

read ( char * buffer,streamsize size );

4)     它们的原型是:

这里 buffer 是一块内存的地址,用来存储或读出数据。参数size 是一个整数值,表示要从缓存(buffer)中读出或写入的字符数。

5)   示例程序

例1

写程序

    std::ofstreamoutfile ("D:/new.txt",std::ofstream::out|std::ofstream::binary);//写入文件

    if (outfile.is_open())

    {

        char buf[1024]={0};

        strcpy(buf,"huanghao2015082401");

        int n=strlen(buf);

        cout<<n<<endl;

        outfile.write(buf,strlen(buf));

    }

 

读程序

// reading binary file 

#include <iostream> 

#include <fstream.h> 

 

const char * filename = "D:/new.txt"; 

 

int main () { 

    char * buffer; 

    long size; 

    ifstream in (filename,ios::in|ios::binary|ios::ate);  //没有将该文件的内容清除掉,这个是读取

    size =in.tellg(); 

    in.seekg(0, ios::beg); 

    buffer =new char [size+1]; 

                  memset(buffer,0,size+1);

    in.read(buffer, size); 

    in.close(); 

 

    cout<< "the complete file is in abuffer"; 

 

    delete[] buffer; 

    return 0; 

} 

//运行结果: 

The complete file is in a buffer

 

 

例2

读程序

// read a file into memory

#include <iostream>     // std::cout

#include <fstream>      // std::ifstream

 

int main () {

 

 std::ifstream is ("test.txt", std::ifstream::binary);

  if (is) {

    // get length of file:

   is.seekg (0, is.end);

    int length = is.tellg();

   is.seekg (0, is.beg);

 

char * buffer = new char [length+1];

memset(buffer,0,length+1);

 

 

   std::cout << "Reading" << length<< "characters... ";

    // read data as a block:

   is.read (buffer,length);

 

    if (is)

     std::cout << "allcharacters read successfully.";

    else

     std::cout << "error:only " << is.gcount()<< " could beread";

   is.close();

 

    // ...buffer contains the entire file...

cout<<endl;

cout<<is.gcount()<<endl;//获取读取的字符数

cout<<buffer<<endl;

    delete[] buffer;

  }

  return 0;

}

 

例3

写程序(写结构)

void write03()

{

  struct record { 

      char name[10]; 

      int age; 

  };

  struct record array[2]= {{"Ken", 24}, {"Knuth", 28}};

  std::ofstreamoutfile ("D:/new.txt",std::ofstream::out|std::ofstream::binary);//写入文件

  if (outfile.is_open())

  {

      outfile.write((char*)array,sizeof(record)*2);

  }

}

 

读程序(读结构体)

void read03()

{

 

  struct record { 

      char name[10]; 

      int age; 

  }; 

 

 

  struct record array[2];

 

  std::ifstreaminfile ("D:/new.txt",std::ifstream::binary);//读取文件

 

 

  // get size of file

  infile.seekg(0,infile.end);//让读取文件的指针跳转到文件末尾 意思是离文件end处为0

  long size = infile.tellg();//计算出文件的字符串长度

  infile.seekg(0);//将文件指针指向文件开始位置

 

  infile.read((char*)array,size);

 

  printf("Name1: %s\tAge1: %d\n", array[0].name, array[0].age); 

  printf("Name2: %s\tAge2: %d\n", array[1].name, array[1].age); 

 

}

例4

写程序(写整数)

 void write04()

{

  std::ofstreamfout("D:/a.dat",std::ios::binary);

 

  int nNum = 20;

  std::stringstr("Hello, world");

 

  fout.write((char*)&nNum, sizeof(int));

  fout.write(str.c_str(),sizeof(char) *(str.size()));

 

  fout.close();

}

读程序(读整数)

void read04()

{

  std::ifstreamfin("D:/a.dat", std::ios::binary);

 

  int nNum;

  char szBuf[256] = {0};

 

  fin.read((char*)&nNum, sizeof(int));

  fin.read(szBuf,sizeof(char) *256);

 

  std::cout<< "int = " << nNum<< std::endl;

  std::cout<< "str = " << szBuf<< std::endl;

 

  fin.close();

}

 

5. 按行读取

示例程序

例1(用cin  标准输入)

// istream::getline example

#include <iostream>     // std::cin, std::cout

 

int main () {

  char name[256], title[256];

 

 std::cout << "Please,enter your name: ";

 std::cin.getline (name,256);

 

 std::cout << "Please,enter your favourite movie: ";

 std::cin.getline (title,256);

 

 std::cout << name << "'s favourite movie is " << title;

 

  return 0;

}

例2(ifstream 按行读取)

int getline2()

{

    ifstreamifs;

    ifs.open("D:/test.ini",ifstream::in);

    if (ifs.is_open())

    {

        char data[256]={0};

 

        while (!ifs.eof())

        {

            ifs.getline(data,256);

            cout<<data<<endl;

            memset(data,0,256);

        }

    }

    return 0;

}

 

 

6. 关闭(close)

当文件读写操作完成之后,我们必须将文件关闭以使文件重新变为可访问的。成员函数close(),它负责将缓存中的数据排放出来并关闭文件。这个函数一旦被调用,原先的流对象就可以被用来打开其它的文件了,这个文件也就可以重新被其它的进程所访问了。为防止流对象被销毁时还联系着打开的文件,析构函数将会自动调用关闭函数close。

 

 

 

 

 

C++文件读写的基本操作详解-ifstream、ofstream的用法 下面由浅入深介绍一下C++中文件的读写操作,每一段代码都可以单独运行,我会试图以最短的代码解释清楚基本的读写操作。 1 文本文件的基本写操作 功能:向文件 myfile.txt 中写入数据。 代码: #include <fstream> #include <string> using namespace std; int main() { ofstream ou... 阅读详情

相关推荐

C++ 利用 ifstream 和 ofstream 读取和修改文件内容

C 语言读取文件的时候很麻烦,C++ 相对来说有很方便的库可以用,方便的多,所以平常开发中推荐使用 C++ 中的库去读写文件。本文介绍如何利用 C++ 进行最简单的读写文件操作。 fstream 库 用到的关键库是 fstream. 在教科书上最常见的输出输入库是 iostream 但是它针对的是标准的输入输出设备读写,而 fstream 是针对文件的。 它有 3 个很重要的类。 ifstrea...

frank 的专栏 1万+

c++输出文件流ofstream用法详解

头文件 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;fstream&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;包含的多个文件流类,这里列出常用的4个: ifstream Input file stream class (class )链接 ofstream Output file stream (class )链

ims的博客 6万+

c++中ifstream,ofstream和fstream的使用方法

更多精彩尽在原文地址 iOS开发之家 一、C++中IO库类型 c++中的IO库类型和头文件如下: 各种IO库类型对应的继承关系为: 类型ifsream和istringstream都继承自istream; 类型ofsream和ostringstream都继承自ostream; 类型fsream和stringstream都继承自iostream; 继承机制的特点就是可以讲一个派生类对象当作基类对象来...

qq2899926939的博客 813

【C++】 输入文件流ifstream用法详解

文章目录c++ 输入文件流`ifstream`用法详解输入流的继承关系:C++ 使用标准库类来处理面向流的输入和输出:成员函数Public member functions1. **`(constructor)`**2. **`ifstream::open`**3. **`ifstream:: is_open`**4. **`ifstream:: close`**5. **`ifstream:: rdbuf`**6. **`ifstream:: operator =`**Public member func

qq_43331089的博客 2万+

C++文件流:通过ofstream和ifstream轻松实现文件读写

C++文件流是用于进行文件读写操作的工具,它提供了一种能够简单、高效地与外部文件进行交互的方式。C++中文件流主要通过ofstream和ifstream来实现对文件的写入和读取。ofstream(output file stream)用于写入文件,可以创建、打开并写入文件内容。ifstream(input file stream)用于读取文件内容,可以打开并读取文件中的数据。文件流操作可以是文本模式的,也可以是二进制模式的,允许以不同的方式对文件进行读取和写入。

Lion_Long的博客 3万+

【C++ 拓展】ifstream、ofstream、fstream的使用

在C++编程中,文件操作是一项常见而重要的任务。为了更便捷地进行文件读写操作,C++提供了三个关键的文件流类:ifstream、ofstream和fstream。这三个类分别用于输入、输出以及读写文件。通过它们,我们能够轻松地处理文件的打开、读取、写入和关闭等操作,为程序员提供了便利的文件处理工具。在本文中,我们将深入探讨这三个文件流类的基本用法,介绍它们的构造函数、常用成员函数以及一些实际应用示例,以帮助读者更好地理解和运用这些文件流类。

m0_62599305的博客 5596

c++中ifstream和ofstream的详细用法

TITLE:因为不经常用这两个操作,每次用都得找,网上的文章良莠不齐,有时候不容易找到合适的,故将其记录下来,供以后使用方便。 1. fstream fstream提供了三个类,用来实现c++对文件的操作。(文件的创建、读、写)。 ifstream -- 从已有的文件读 ofstream -- 向文件写内容 fstream -- 打开文件供读写 2.文件打开模式: ios...

Jorwnpay's Blog 8206

STM32F103xx / STM32F429VET6最小系统原理图

心血来潮想试一下STM32F4系列和F1系列在编程上有什么差别,手头没有开发板,本着能勤俭节约的原则自己先做一块看看能不能成,看了一下STM32F429VET6的芯片在F429xx中最便宜,对照着数据手册绘制了原理图画了PCB,目前打板中,焊接完如果跑不通回来修改文章。这里我们可以看到,VDD是标准工作电压,VDDA是模拟工作电压,且VDDA必须与VDD等电位,VBAT是备份工作电压,一般接纽扣电池电源,如果存在VREF+引脚,则要求VDDA-VREF+ < 1.2V。截图下来比较糊,不知道为什么。

m0_51294753的博客 1万+

C++ ofstream和ifstream详细用法

ofstream 和 ifstream 详细用法导读一、打开文件二、关闭文件三、读写文件1、文本文件的读写2、二进制文件的读写四、检测EOF五、文件定位 导读 ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O. stream这个类有两个重要的运算符: 1、插入器 << 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示

Happinesspills 1万+

基于PCIe的NVMe协议在FPGA中实现方法

NVMe协议是工作在PCIE的最上层协议层的,故需要先搞清楚PCIE。本文基于Xilinx的UltraScale+,开发工具为Vivado2021.2。NVMe的学习仍以spec为主,其它资料辅助理解,有冲突时以spec为准,必要时可对比最新版本spec。(此文重点介绍学习方法及资料,有时间再加细节)。 主要参考的文章是《老男孩读PCIe》,同时参考《古猫先生》,重点学习TLP报文部分,数据链路层和物理层的内容可以先不看。再买一本书《PCI Express 体系结构导读-王齐》用来查阅做笔记。

leixj的博客 1万+

MySQL服务启动失败?手把手教你排查NET HELPMSG 3534错误(附完整修复流程)

本文针对Windows平台上MySQL服务启动失败并提示NET HELPMSG 3534错误的常见问题,提供了系统性的排查与修复指南。文章深入剖析了错误本质,并手把手教你通过查看MySQL错误日志、检查并初始化数据目录、修正Windows服务配置、排查my.ini配置文件陷阱等核心步骤,彻底解决这一棘手问题,帮助开发者和运维人员快速恢复数据库服务。

wdx0123456的博客 894

c++中ifstream及ofstream超详细说明

前文说过,ifstream是继承于istream,ofstream是继承于ostream,fstream是继承于iostream类,而他们使用的缓冲区类是filebuf。 关于这些类之间的关系,有兴趣可以去查看我之前的文章: c++标准输入输出流关系梳理 1. filebuf类介绍 filebuf类又比stringbuf类要复杂一点,毕竟是对文件进行读写,首先在它的成员变量中找到了这样一条声明: __file_type _M_file; _M_file就是它里面的文件操作对象,那么探究一下__file

cpp加油站的专栏 3101

YOLOv8 轴承缺陷检测 使用YOLOv8进行训练、评估和可视化预测结果 包含1440张图片的轴承缺陷检测数据集 YOLO格式或XML格式

本文介绍了一个基于YOLOv8的轴承缺陷检测项目。数据集包含1440张图片,标注了4类缺陷(凹槽、凹陷、卡伤、划痕),按8:1:1比例划分为训练集(1152张)、验证集(144张)和测试集(144张)。标注文件支持YOLO格式和XML格式,可直接用于模型训练。项目实现了数据准备、模型训练、评估及可视化预测结果的全流程,使用YOLOv8n预训练模型进行50个epoch的训练,并提供了数据格式转换(XML转YOLO)的代码示例。最终模型可自动检测轴承表面缺陷,并保存预测结果。

OICQQ67658008的博客 1441

C++ :ofstream 和 ifstream 用法详解

[导读] ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O. stream这个类有两个重要的运算符:   1、插入器(<<)   向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字...

hhd1988的专栏 1万+

高动态范围结构光三维测量技术:从多曝光融合到深度学习的演进与应用

本文深入探讨了高动态范围结构光三维测量技术的演进与应用,从传统的多曝光融合技术到深度学习驱动的创新方案。通过工业案例展示了该技术在提升测量精度和效率方面的显著优势,特别是在处理高反光、复杂表面时的突破性表现。文章还提供了针对不同工业场景的技术选型指南,帮助工程师优化三维测量解决方案。

weixin_29063979的博客 293

第一届“龙信杯”电子数据取证竞赛Writeup

第一届“龙信杯”电子数据取证竞赛Writeup

toto的博客 1万+

c++文件处理ofstream,ifstream

①将输出内容写入到文本中间中:      步骤:❶包含头文件fstream    #include                 ❷创建一个ofstream对象(名字可以随意取,这里去做outFile)  ofstream outFile;                 ❸将创建的对象outFile与某个文件关联起来  outFile.open("automobile.txt");

liuwei271551048的专栏 2192

K8S搭建(centos)四、安装K8S

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 2650

C++ ofstream和ifstream详细用法以及C语言的file用法

ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;   在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:   1、插入器(   向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout   2、

luguifang2011的专栏 1万+

BOSS直聘数据采集、解析处理、分析与可视化实战

招聘和求职是一对永恒的话题,不论什么时候都有招聘或者是求职的需求,找不找得到工作可能最主要的就是匹配度是否高,待遇福利是否诱人,如今互联网的快速发展,找工作的方式早已发生了翻天覆地的变化,从以往的面对面形式的招聘简历投递和面试方式,变成了电子简历网络直接投递、远程面试录用的形式,便捷性大大提升,需求的快速增长,促生了一批互联网招聘类的企业,诸如:51job、BOSS直聘、拉勾网等等,为了能...

Together_CZ的博客 9025

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

关于C++中 ofstream和ifstream类用法

在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的。stream有一个子类fstream,有关文件操作就是通过这个类进行的。fstream有两个子类ofstream和ifstream类。ofstream中of是output file之意,指从内存输出到硬盘;ifstream中if是input file之意,指从硬盘输入到内存。操作文件需要包含头文件fstream.h。

m0_72128260的博客 2603

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

c语言ofstream,c++中ifstream及ofstream超详细说明

前文说过,ifstream是继承于istream,ofstream是继承于ostream,fstream是继承于iostream类,而他们使用的缓冲区类是filebuf。关于这些类之间的关系,有兴趣可以去查看我之前的文章:c++标准输入输出流关系梳理1. filebuf类介绍filebuf类又比stringbuf类要复杂一点,毕竟是对文件进行读写,首先在它的成员变量中找到了这样一条声明:__fil...

weixin_42492000的博客 827

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

理解C++中ifstream、ofstream、fstream文件输入输出

文件输入输出 头文件fstream定义了三个类型的头文件: 1、ifstream从一个给定文件读取数据 2、ofstream向一个给定文件写入数据 3、fstream可以读写给定文件 fstream除了继承了iostream类型的行为外,还增加了一些新的功能,所以IO类型不能调用这些新的功能: 1、使用文件流对象 输入流in用于初始化从文件中读取数据。在C++新标准中,文件名既可以是库类型str...

algsup 2806

【C++】ifstream、ofstream、fstream的基础使用

ifstream、ofstream、fstream各接口简单使用

志之所趋,无远弗届,穷山距海,不能限也 597

c语言ofstream头文件,c++中ifstream及ofstream超详细说明

前文说过,ifstream是继承于istream,ofstream是继承于ostream,fstream是继承于iostream类,而他们使用的缓冲区类是filebuf。关于这些类之间的关系,有兴趣可以去查看我之前的文章:c++标准输入输出流关系梳理1. filebuf类介绍filebuf类又比stringbuf类要复杂一点,毕竟是对文件进行读写,首先在它的成员变量中找到了这样一条声明:__fil...

weixin_36036343的博客 5759

C++学习笔记-文件操作(ifstream,ofstream,fstream)

文件操作 目录   C++库中处理文件的输入输出 文件操作的具体步骤    (1)创建输入输出流         ①open函数         ②is_open()    (2)文件的关闭    (3)文件的读取和写入 实例 (1)将当前main.cpp文件读取到Program.txt中  ①代码           ②运行结果 文件的随机读写 C++库中处理文...

[SZU_Crayon] 2695
上一篇: fread与fwrite
下一篇: C++ seekg,seekp,tellg,tellp
ToConnection
博客等级 码龄16年 4粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值