2025年ifstream 读文件(ifstream读文件)

ifstream 读文件(ifstream读文件)在看 C 编程思想中 每个练习基本都是使用 ofstream ifstream fstream 以前粗略知道其用法和含义 在看了几位大牛的博文后 进行整理和总结 标准中定义的 std cin 就是 istream 类型 istream 是 std basic istream 类模板的一个实例化 c 中定义的标准输入输出流是 istream 和 ostream 他们是 iostream 类的父类

大家好,我是讯享网,很高兴认识大家。



在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:


讯享网

标准中定义的std::cin就是istream类型。istream是std::basic_istream类模板的一个实例化。

c++中定义的标准输入输出流是istream和ostream,他们是iostream类的父类,而cin是istream的对象,cout是ostream的对象。头文件fstream(对文件操作的流)包含了ifstream和ofstream,头文件sstream(对字符串操作的流)包含了istringstream和ostringstream,这些类都是继承自istream和ostream的。它们的关系如下图:

 

 

 

这里主要是讨论fstream的内容:

1.打开文件

在fstream类中,成员函数open()实现打开文件的操作,从而将数据流和文件进行关联,通过ofstream,ifstream,fstream对象进行对文件的读写操作

函数:open()

参数: filename   操作文件名

           mode        打开文件的方式

           prot         打开文件的属性                            //基本很少用到,在查看资料时,发现有两种方式

打开文件的方式在ios类(所以流式I/O的基类)中定义,有如下几种方式:

这些方式是能够进行组合使用的,以“或”运算(“|”)的方式:例如

打开文件的属性同样在ios类中也有定义:

很多程序中,可能会碰到ofstream out("Hello.txt"), ifstream in("..."),fstream foi("...")这样的的使用,并没有显式的去调用open()函数就进行文件的操作,直接调用了其默认的打开方式,因为在stream类的构造函数中调用了open()函数,并拥有同样的构造函数,所以在这里可以直接使用流对象进行文件的操作,默认方式如下:

当使用默认方式进行对文件的操作时,你可以使用成员函数is_open()对文件是否打开进行验证

2.关闭文件

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

3.文本文件的读写

类ofstream, ifstream 和fstream 是分别从ostream, istream 和iostream 中引申而来的。这就是为什么 fstream 的对象可以使用其父类的成员来访问数据。

一般来说,我们将使用这些类与同控制台(console)交互同样的成员函数(cin 和 cout)来进行输入输出。如下面的例题所示,我们使用重载的插入操作符<<:

从文件中读入数据也可以用与 cin>>的使用同样的方法:

上面的例子读入一个文本文件的内容,然后将它打印到屏幕上。注意我们使用了一个新的成员函数叫做eof ,它是ifstream 从类 ios 中继承过来的,当到达文件末尾时返回true 。

要想重置以上成员函数所检查的状态标志,你可以使用成员函数clear(),没有参数。

1. file1.seekg(1234,ios::cur);//把文件的读指针从当前位置向后移1234个字节  

2. file2.seekp(1234,ios::beg);//把文件的写指针从文件开头向后移1234个字节

以下例子使用这些函数来获得一个二进制文件的大小:

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

发现的问题:

问题1:如果fin指向文件缓冲区中剩余字符数小于sizeof szTmp,read的行为如何?

问题2:如何读取剩余的字符?

解:fin.read(szTmp,sizeof szTmp)将剩余字符全部放入szTmp的前几位,并返回0(正常读取完指定字符数时返回1),同时设置eofbit

问题2:如何读取剩余的字符?

解:

循环读取一整个文件的改进:

&nbsp;

小讯
上一篇 2025-05-15 20:45
下一篇 2025-04-21 15:10

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/207593.html