dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | flex | CRM | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>C/C++>C/C++技术资料>文章内容
C++中的fstream类用于文件的I/O操作
来源:ZDnet     作者:    
文件的I/O库提供了ANSI C的很多有用的优点,包括的界面,国际化和地方化的支持,安全性能,以及简单的调试。让我们看看如何有效地使用这些类库。

介绍一下类

库包含了三个基本的类:ifstream, ofstream和fstream。这三个类分别代表一个输入文件,一个输出文件,以及一个输入输出文件。Ifstream类支持>>操作符,ofstream类支持<<操作符,fstream类同时支持>>和<<操作符。所有对象都能够把一个文件名当成构造的变量,并能够自动的打开文件,如:

std::ofstream dictionary(“myfile.txt”);

类的析构函数自动地添加清除文件内容并关闭文件,所以当你忘记关闭文件时也无大碍。如果在构造中不提供一个文件名,可以通过调用open()成员方法来打开文件,如下所示:

std::ofstream dictionary;
dictionary.open(“myfile.txt”);
dictionary.close(); //explicit

为了能演示库的强大功能,我们先看看一个具体的范例。表A包含了一个程序,程序的功能为:生成了一个名为dictionary的ifstream对象,打开一个名为dict.txt的文件,以及在屏幕上打印每一个字。

相对于典型的程序,这个程序要简单得多了。第一,在每一次读取操作着无需检查EOF(end of file)。类执行!操作符,如果产生错误,!操作符的值即为原值的相反。我们可以利用这一特点来检查文件是否正确的打开。第二,While循环也使用这一操作符来检查文件的状态。最后,当程序结束时,dictionary对象的析构会自动地关闭文件。

文件打开模式
如果你不具体指明文件的打开模式,fstream类会使用缺省模式。例如,ifstream在缺省情况下会以读的模式打开一个文件,并把文件定在文件的起始处。同样的,ofstream在缺省情况下也是以读的模式打开一个文件。你可以通过使用OR操作符设置多个标记,如下所示:

ofstream logfile("login.dat", ios::binary|ios::app);

表B包含了一系列的文件打开模式和文件。


--------------------------------------------------------------------------------



支持ios::nocreate和ios::noreplace标记。库不支持这些标记。然而,这篇文章讲述了如何很容易地仿制它们的功能。


--------------------------------------------------------------------------------
文件的重定位

每一个文件对象都有一个逻辑指针以指向文件中一定的位置偏移量。你可以通过调用seekp()成员函数来指定逻辑到文件中的任一位置,seekp()成员通过指定的位置偏移量实现文件中重新定位。在下面的范例中,程序定位到第10字节的文件位置,然后调用tellp()来输出新的位置:

ofstream fout("parts.txt");
fout.seekp(10); // move 10 bytes ahead from beginning
cout<<"new position: "<
seekp()成员函数还有另一个赋值方式,即将文件偏移方向作为第二个变量。例如,这个可以从当前位置向后移动2个字节到新的位置:

fout.seekp(-3, ios::cur);

你还可以使用以下的标记指定文件位置的方向:

ios::beg // 文件开始的位置
ios::cur //当前位置,比如:ios::cur+5
ios::end // 文件末尾的位置


将读和写操作结合起来
类能以<<和>>操作符来执行所有的数据类型,如std::string和std::complex。表C显示了如何使用这些操作符来执行一个结合的读和写的操作。程序打开一个文件,写入两个域,重新回到文件的起始位置,然后读取原来的域到time_t和std::string对象。

支持多种功能
类库的另一个显著特性是能够支持wchar_t。到目前为止,我所讨论的每个类都具有能够支持包含有wchar_t数据的wchar_t等价物。然而,标准只支持字符型的文件名,所以这些类只能带有char *的变量,而不管它们的内容。表D显示了表A中看到的wchar_t版本。可以看到,从基于字符型的I/O到wchar_t的转换是非常的容易。

对于,是可行的选择
必须承认,也不是绝对的完美,它也不能提供每一个程序员的所有要求。例如,习惯于文件描述符(而不是文件名)的UNIX开发人员会觉得非常的繁琐,因为还没有将描述符转化为文件名的标准方法。同样,不支持wchar_t文件名也会在一定的环境下碰到很多障碍。然而,如果你选择,你会觉得这是一种更加直觉,稳定,方便的方法。

 

 

上一篇:cgi中的邮件发送器2   下一篇:用VC++实现console程序显示彩色文本
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·C语言数组排序小结
·Python 与 C++ 程序的简单实例对
·c++ 数组与指针
·C++中的内存管理(new、delete、
·如何用C语言开发DSP嵌入式系统
·如何用C语言开发DSP嵌入式系统
·Linux下C语言编程
·学习arm的话先看哪本书?
·C++初学者应该关心的优秀图书一
·利用C语言小程序来解决大问题
·用C语言写PHP扩展的步骤
·用C语言扩展PHP功能
  相关文章
·用VC++实现console程序显示彩色
·用自删除dll实现应用程序的安装/
·数据库综合开发实践
·在VC++6.0开发中实现全屏显示
·如何创建有模式对话框
·如何改变MFC默认文档操作方式
·熟悉标准库
·Visual C++窗口标题改变的几种方
·谈新手对CString的使用
·利用VC编程在界面上实现3D文字
·MFC应用程序框架入门
·无闪烁刷屏技术的实现
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763