当前位置:网站首页 > R语言数据分析 > 正文

ifstream打开文件(ifstream写文件)



总结放前面:最后总结一下:用这个东西,不如用C标准库和linux系统调用,如果不是为了让C++知识饱满一点,真不想研究这东西。

文件流是以磁盘中的文件作为输入、输出对象的数据流。输出文件流将数据从内存输出到文件中,这个过程通常称为写文件;输入文件流将数据从磁盘中的文件读入内存,这个过程通常称为读文件。本节将针对文件流进行详细讲解。

在C++中,要进行文件的读写操作,首先必须建立一个文件流对象,然后把文件流对象与文件关联起来(打开文件)。文件流对象与文件关联之后,程序就可以调用文件流类的各种方法对文件进行操作了。C++提供了三个类支持文件流的输入、输出,这三个类都包含在fstream头文件中。

ifstream:输入文件流类,用于实现文件的输入。

ofstream:输出文件流类,用于实现文件的输出。

fstream:输入/输出文件流类,可同时实现文件的输入和输出。

文件流不像标准I/O流预定义了输入流对象和输出流对象,使用文件流时,需要创建文件流对象。创建文件流对象时,可以调用文件流类的无参构造函数,也可以调用文件流类的有参构造函数,具体如下所示。

(1)调用无参构造函数创建文件流对象。

ifstream类、ofstream类和fstream类都提供了默认无参构造函数,可以创建不带参数的文件流对象,示例代码如下所示:

2)调用有参构造函数创建文件流对象

ifstream类、ofstream类和fstream类也提供了有参构造函数,在创建文件流对象时可以指定文件名和文件打开模式,示例代码如下所示:

ifstream类默认文件打开模式为ios::in,ofstream类默认文件打开模式为ios::out,fstream类默认文件打开模式为ios::in|ios::out。

文件最基本的操作就是打开和关闭,在对文件进行读写之前,需要先打开文件;读写结束之后,要及时关闭文件。下面将针对文件的打开与关闭进行讲解。

1.打开文件

C++提供了两种打开文件的方式:第一种方式是调用文件流类的构造函数;第二种方式是调用文件流类的成员函数open()。第一种调用文件流类的构造函数打开文件方式就是在创建文件流对象时传入文件名和文件打开模式。第二种调用open()函数打开文件的方式。

ifstream类、ostream类和fstream类都提供了成员函数open()用于打开文件,open()函数声明如下所示:

在上述函数声明中,参数filename表示要打开的文件;参数mode表示文件打开模式。如果文件打开失败,则文件流对象的值为0。文件打开模式就是指以什么方式打开文件,如只读模式、只写模式等。C++常用的文件打开模式及含义如表8-2所示。

表8-2 C++常用的文件打开模式及含义

word文件通过流写入到response中下载下来打不开_c++

文件打开模式可以通过位或运算符“|”组合使用,示例代码如下所示:

2.关闭文件

文件使用完毕之后,要及时关闭。关闭文件就是解除文件与文件流的关联,释放缓冲区和其他资源的过程。ifstream类、ostream类和fstream类都提供了成员函数close()用于关闭文件,close()函数声明如下所示:

close()函数没有参数和返回值,用法也很简单,直接通过文件流对象调用close()函数就可以关闭文件。为了加深读者的理解,下面通过案例演示文件的打开与关闭。首先在项目根目录下创建文本文件hello.txt,然后编写代码,调用open()函数打开hello.txt文件,并在其中写入随便写点东西,再调用close()函数关闭hello.txt文件,代码如例8-3所示。

测试代码:

测试结果:

看到输出结果中的a a a了吗,这是三个回车符,使用十六进制方式打开hello.txt文件看看,如下所示,对比发现0d被吃掉了吗?0d怎么不见了?0d就是' '就是回车符,怎么不见了?这是读写机制问题,后来会说的。

word文件通过流写入到response中下载下来打不开_ios_02

对文本文件的读写,C++提供了两种方式,第一种方式是使用提取运算符“>>”和插入运算符“<<”,第二种方式是调用文件流类的成员函数。下面分别介绍这两种读写方式。

istream类重载了“>>”运算符,ifstream类继承了istream类,也继承了“>>”运算符;ostream类重载了“<<”运算符,ofstream继承了ostream类,也继承了“>>”运算符。istream类和ostream类共同派生了iostream类,而fstream类又继承自iostream类,因此fstream类同时继承了“>>”运算符和“<<”运算符。由上述继承关系可知,文件流对象也可以使用“>>”运算符和“<<”运算符传输数据,实现文本文件的读写。下面通过案例演示使用“>>”运算符和“<<”运算符读写文本文件

测试代码:

测试结果:

从结果可知,ifs >> buf;会忽略所有空格类的字符,本次测试的有 就是回车,制表符TAB键,换行符,谨慎使用!!!

文件流类继承了istream类和ostream类的成员函数get()、getline()和put(),通过调用这些成员函数,文件流对象也可以完成文件的读写。下面就通过案例演示调用文件流类的成员函数实现文件的读写:

测试代码:

测试结果:

结果验证:

word文件通过流写入到response中下载下来打不开_ios_03

继续向下学习。

除了读写函数,文件流类还提供了其他成员函数,如eof()、bad()等,这些函数一般用于处理文件读写过程中的错误。下面介绍几种常用的错误处理函数。

eof()函数用于检测文件是否到达末尾,函数声明如下所示:

在读文件时,如果文件到达末尾,eof()函数会返回true。

bad()函数用于检测文件在读写过程中是否出错,函数声明如下所示:

如果文件读写出错,bad()函数会返回true。例如,对一个打开模式为ios::in的文件进行写入操作,或者写入的设备没有足够空间,调用bad()函数会返回true。bad()函数的用法示例代码如下:

fail()函数也用于检测在读写过程中是否出错,函数声明如下所示:

fail()函数比bad()函数的检错范围更广泛。文件到达末尾,或者读写过程没有达到预期条件,例如,想要读取一个整数却获得了一个字母时,fail()函数都能检测到并返回true。fail()函数的用法示例代码如下:

good()函数用于检测文件流状态和文件读写过程是否正常,函数声明如下所示:

如果文件流状态、文件读写过程没有错误,good函数就返回true。它的作用与bad()函数、fail()函数相反,对于bad()函数、fail()函数返回true的情况,good()函数会返回false。good()函数的用法示例代码如下:

clear()函数用于清除文件流的错误状态,即重置文件流的状态标志位,函数声明如下所示:

在上述函数声明中,参数state表示流的状态,默认值为goodbit(值为0)。在文件读写过程中,调用close()关闭文件之后,如果再使用文件流对象打开其他文件,一般先调用clear()函数将文件流对象的标志位重新初始化。clear()函数的用法示例代码如下:

文件流类从istream类和ostream类分别继承了write()函数和read()函数,这两个函数可以用来读写二进制文件。下面通过案例演示二进制文件的读写:我只想搞定前面的0d和空格问题,读写结构啥的,都是小意思。

舒缓一下

word文件通过流写入到response中下载下来打不开_文件流_04

测试代码:

执行结果:现在终于文件的内容和读出来的内容一样了。

word文件通过流写入到response中下载下来打不开_开发语言_05

测试结果:

word文件通过流写入到response中下载下来打不开_ios_06

在C语言中实现文件的随机读写要依靠文件位置指针,在C++中文件的随机读写也是通过移动文件位置指针完成的。C++文件流类提供了设置文件位置指针的函数。

ifstream类提供了tellg()函数、seekg()函数,这两种函数声明分别如下所示:

在上述函数声明中,tellg()函数用于返回文件位置指针的位置。seekg()函数用于设置文件位置指针的位置,即移动文件位置指针,它有两种重载形式。第一种重载形式有一个参数streampos,表示文件位置指针从文件开头移动streampos长度的距离;第二种重载形式有两个参数,第一个参数streamoff表示文件位置指针的移动距离,第二个参数ios::seek_dir表示参照位置。

ios::seek_dir有以下三个取值。

ios::beg=0,表示从文件开头开始移动文件位置指针。

ios::cur=1,表示从当前位置开始移动文件位置指针。

ios::end=2,表示从文件结尾开始移动文件位置指针。

注意:streampos和streamoff是C++标准库重定义的数据类型。

tellg()函数与seekg()函数的用法示例代码如下:

ofstream类提供了tellp()函数、seekp()函数用于移动文件位置指针,这两种函数声明分别如下所示:

tellp()函数与tellg()函数的含义与用法相同,seekp()函数与seekg()函数的含义与用法相同。fstream类拥有上述所有函数,即拥有tellg()函数、seekg()函数、tellp()函数和seekp()函数。为了加深读者对这两组函数的理解,下面通过案例演示文件的随机读写

在前一个实验中,已经有了一个文件config.bin,我们在此文件的基础上,在添加一个config结构体。这样文件中就存有两个结构体,读的时候,偏移一个结构体的距离,读第二个结构体。

实例代码:

测试结果:

word文件通过流写入到response中下载下来打不开_文件流_07

到此这篇ifstream打开文件(ifstream写文件)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • ettercap扫描不到ip(ettercap扫描不到局域网中的静态ip)2025-03-01 12:09:10
  • noneart翻译(nonstop翻译)2025-03-01 12:09:10
  • springboot跨域问题解决方案(springboot 跨域问题)2025-03-01 12:09:10
  • play store翻译成中文(play store变成英文了)2025-03-01 12:09:10
  • shore是什么意思英文(shore是什么意思啊)2025-03-01 12:09:10
  • aurocean怎么读(auroras怎么读)2025-03-01 12:09:10
  • ueditor官网版本(ueditor demo)2025-03-01 12:09:10
  • 锁表原因oracle(oracle锁表报错)2025-03-01 12:09:10
  • spring百度云(spring day百度云下载)2025-03-01 12:09:10
  • tornado siren翻译(tortoises翻译)2025-03-01 12:09:10
  • 全屏图片