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

ifstream 读文件(ifstream读文件)



在看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:如何读取剩余的字符?

解:

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

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

版权声明


相关文章:

  • heater翻译成中文(heating翻译成中文)2025-10-24 07:09:08
  • apc和emr哪个更好(emr和apc的区别)2025-10-24 07:09:08
  • endoport器械(precor器械使用方法)2025-10-24 07:09:08
  • storecode翻译中文(store state翻译)2025-10-24 07:09:08
  • vmware密钥(vmware密钥 永久)2025-10-24 07:09:08
  • char数组合并(char数组求和)2025-10-24 07:09:08
  • proremoval怎么读(promemoria怎么读)2025-10-24 07:09:08
  • 连接redis(连接redis不需要用户名么)2025-10-24 07:09:08
  • 删除虚拟环境的命令(virsh删除虚拟机的命令)2025-10-24 07:09:08
  • ubuntu-ports 镜像(ubuntu的镜像)2025-10-24 07:09:08
  • 全屏图片