C++中的文件输入/输出(3):掌握输入/输出流
2011年06月13日
Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4 /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:宋体; mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;}table.MsoTableGrid {mso-style-name:"Table Grid"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; border:solid windowtext 1.0pt; mso-border-alt:solid windowtext .5pt; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-border-insideh:.5pt solid windowtext; mso-border-insidev:.5pt solid windowtext; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.0pt; font-family:宋体; mso-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;}
掌握输入/输出流在这一章里,我会提及一些有用的函数。我将为你演示如何打开一个可以同时进行读、写操作的文件;此外,我还将为你介绍其它打开文件的方法,以及如何判断打开操作是否成功。因此,请接着往下读!
到目前为止,我已为你所展示的只是单一的打开文件的途径:要么为读取而打开,要么为写入而打开。但文件还可以以其它方式打开。迄今,你应当已经认识了下面的方法:
ifstream OpenFile(“cpp-home.txt”);
噢,这可不是唯一的方法!正如以前所提到的,以上的代码创建一个类ifstream的对象,并将文件的名字传递给它的构造函数。但实际上,还存在有不少的重载的构造函数,它们可以接受不止一个的参数。同时,还有一个open()函数可以做同样的事情。下面是一个以上代码的示例,但它使用了open()函数:
ifstream OpenFile;
OpenFile.open(“cpp-home.txt”);
你会问:它们之间有什么区别吗?哦,我曾做了不少测试,结论是没有区别!只不过如果你要创建一个文件句柄但不想立刻给它指定一个文件名,那么你可以使用open()函数过后进行指定。顺便再给出一个要使用open()函数的例子:如果你打开一个文件,然后关闭了它,又打算用同一个文件句柄打开另一个文件,这样一来,你将需要使用open()函数。
考虑以下的代码示例:
# include
# include
using namespace std;
void read(ifstream &T) { //pass the file stream to the function
//the method to read a file, that I showed you before
char ch;
while (!T.eof()) {
T.get(ch);
cout read(T);//...
T.close();
T.open("file2.txt");
read(T);//...
T.close();
}
据此,只要file1.txt和file2.txt存在并存储了文本内容,你将看到这些内容。
现在,该向你演示的是,文件名并不是你唯一可以向open()函数或者构造函数(其实都一样)传递的参数。下面是一个函数原型:
ifstream OpenFile(char*filename, int open_mode);
你应当知道filename表示文件的名称(一个字符串),而新出现的则是open_mode(打开模式)。open_mode的值用来定义以怎样的方式打开文件。下面是打开模式的列表:
名称
描述
ios::in
打开一个可读取文件
ios::out
打开一个可写入文件
ios::app
你写入的所有数据将被追加到文件的末尾,此方式使用ios::out
ios::ate
你写入的所有数据将被追加到文件的末尾,此方式不使用ios::out
ios::trunk
删除文件原来已存在的内容(清空文件)
ios::nocreate
如果要打开的文件并不存在,那么以此参数调用open()函数将无法进行。
ios::noreplace
如果要打开的文件已存在,试图用open()函数打开时将返回一个错误。
ios::binary
以二进制的形式打开一个文件。
实际上,以上的值都属于一个枚举类型的int常量。但为了让你的编程生涯不至于太痛苦,你可以像上表所见的那样使用那些名称。
下面是一个关于如何使用打开模式的例子:
#include
void main()
{
ofstream SaveFile("file1.txt", ios::ate);
SaveFile
void main()
{
fstream File("test.txt",ios::in | ios::out);
File > str;
cout > str; ―― 这也是新鲜的玩意儿!噢,我确信这行代码让你想起了cin >> .实际上,它们之间有着相当的关联。此行会从文件中读取一个单词,然后将它存入指定的数组变量中。
例如,如果文件中有这样的文本片断:
Hi! Do you know me?
使用File >> str,则只会将”Hi!”输出到str数组中。你应当已经注意到了,它实际上是将空格作为单词的分隔符进行读取的。
由于我存入文件中的只是单独一个”Hi!”,我不需要写一个while循环,那会花费更多的时间来写代码。这就是我使用此方法的原因。顺便说一下,到目前为止,我所使用的读取文件的while循环中,程序读文件的方式是一个字符一个字符进行读取的。然而你也可以一个单词一个单词地进行读取,像这样:
char str[30]; // 每个单词的长度不能超过30个字符
while(!OpenFile.eof())
{
OpenFile >> str;
cout 输入/输出错误(不是在文件末尾)发生,它将返回非零值。
我也要讲一些我认为非常重要的内容!例如,如果你已经创建一个流文件对象,但你没有进行打开文件操作,像这样:
ifstream File; //也可以是一个ofstream
这样,我们就拥有一个文件句柄,但我们仍然没有打开文件。如果你打算迟些打开它,那么可以用open()函数来实现,我已经在本教程中将它介绍了。但如果在你的程序的某处,你可能需要知道当前的句柄是否关联了一个已经打开的文件,那么你可以用is_open()来进行检测。如果文件没有打开,它将返回0 (false);如果文件已经打开,它将返回1 (true)。例如:
ofstream File1;
File1.open("file1.txt");
cout 不能当数据库用
我自己的实践是用指针来输入输出数据比较方便用get() put()一次只能输入或输出一个字符 用read() write()要指定写的字符数量 我比较喜欢用重载运算符>
如:
#include
#include
void main()
{
fstream iofile;
iofile.open("a.txt", ios::in|ios::out);//输入输出类型
//只要你的机器内存够大 你可以把数组写的更大一次就可以写入很多字符
char*p=[10000000];
cin>>p;//写入字符
iofile>p;//将输入的字符出入到内存给p
cout输入的字符在屏幕上输出查看
iofile.close();
}
我是专学语言 对平台操作不会的 呵呵
ares 发表于2004年12月13日 15:20:00--------------------
void main(){
char c;
while (c!='q' && c!='Q'){
cout>c;
}
}
这段代码,如果你输入abcde,它会自动执行5次,
怎么让它执行一次之后就接受键盘输入?
weiwenjiangatm@163.com
等待高手指教
turkeycock 发表于2006年5月14日 5:26:00--------------------
表格中对ios::ate的解释不对,使用ate模式会覆盖原来的数据,使用app模式才会在最后追加字符,我使用的visual studio 2003环境编译执行的
[Lin1]似乎In.seekg(0,ios_base::end);//来到文件末尾
这样的写法才有效!
发表评论
-
多线程+socket+文件读写(面)
2012-01-20 09:08 505多线程+socket+文件读写( ... -
Linux下Socket编程之TCP Server端
2012-01-20 09:07 588Linux下Socket编程之TCP Server端 201 ... -
Socket编程中的select多路复用
2012-01-20 09:07 679Socket编程中的select多路 ... -
[连载] Socket 深度探究 4 PHP (一)
2012-01-20 09:07 604[连载] Socket 深度探究 4 ... -
C#版 Socket编程(最简单的Socket通信功能)
2012-01-20 09:07 760C#版 Socket编程(最简单的Socket通信功能) 2 ... -
如何保护自己的共享软件
2012-01-19 14:11 519如何保护自己的共享软 ... -
向Flash中烧写uboot和linux操作系统
2012-01-19 14:11 1071向Flash中烧写uboot和linux操作系统 2011年 ... -
2011-9-13
2012-01-19 14:11 4842011-9-13 2011年09月13日 JavaSE ... -
使用Windbg排除蓝屏故障(已发表)
2012-01-19 14:11 1162使用Windbg排除蓝屏故障(已发表) 2011年09月28 ... -
C段错误总结
2012-01-19 14:11 602C段错误总结 2012年01月07日 最近一段时间在li ... -
ttraveer.exe应用程序错误是什么意思
2012-01-17 04:02 918ttraveer.exe应用程序错误是什么意思 2010年 ... -
常见的硬盘内存问题的解决方案,ADSL错误代码
2012-01-17 04:01 568常见的硬盘内存问题的解决方案,ADSL错误代码 2011年0 ... -
Ubuntu下各网络服务器配置小结
2012-01-16 02:50 672Ubuntu下各网络服务器配置小结 2011年12月10日 ... -
手把手教你如何搭建PHP本地测试环境和MYSQL数据库的建立和使用
2012-01-16 02:50 653手把手教你如何搭建PHP ... -
php对外发包引发服务器崩溃的终极解决方法分享
2012-01-16 02:50 711php对外发包引发服务器崩溃的终极解决方法分享 2011年1 ... -
笔记本ThinkPad E425 1198-3LC
2012-01-16 02:50 931笔记本ThinkPad E425 1198-3LC 2012 ... -
AS3 编程易犯盲点――绝对对您有帮助,新手们都来看看吧
2012-01-16 02:50 340AS3 编程易犯盲点――绝对对您有帮助,新手们都来看看吧 2 ...
相关推荐
1. 了解标准输入输出流对象的使用方法 2. 掌握利用文件流处理ASCII文件
1. 初始化:从文件将源程序输入到字符缓冲区中。 2. 取单词前:去掉多余空白。调用过程GETNB(); 3. 提取字符组成单词,利用课本P97图4.5转换图构造单词扫描过程SCAN(),需要根据实际情况加以修改。 4. 判断单词的...
(1)掌握C++格式化的输入输出方法。 (2)掌握重载运算符“”和“>>”的方法。 (3)掌握磁盘文件的输入输出方法。
输入输出流 掌握C++输入/输出流(I/O流)的基本概念; 能够在输入/输出中进行基本的格式控制; 掌握文件的I/O操作。
3.掌握ios类中用于控制输入输出成员函数的使用; 4.掌握操纵符格式控制的使用; 5.掌握用户自定义数据类型的输入输出方式; 6.掌握文本文件和二进制文件的输入输出; 7.将C++输入输出流灵活应用到类和对象知识...
通过本章学习,应理解I/O流、流类与流类体系的概念,掌握流的输入/输出控制格式。了解C++有关文件的概念及文件的使用方法,理解文件流类体系结构,掌握实现文件操作的成员函数的使用方法,学会文本文件的打开、读/...
C++文件流: 代码如下:fstream // 文件流ifstream // 输入文件流ofstream // 输出文件流//创建一个文本文件并写入信息//同向屏幕上输出信息一样将信息输出至文件#include<iomanip>#include<fstream>void main(){...
C++中提供了一套输入输出流类的对象,它们是**cin 、cout和cerr**,对应c语言中的三个文件指针stdin、stdout、stderr,分别指向终端输入、终端输出和标准出错输出(也从终端输出)。**cin与>>一起完成输入操作,...
编写一个程序,分析一个文本文件(英文...文本文件为D:\test.txt ,输出该文本文件中含有的单词总数,分析一个文本文件(英文文章)中 各个词出现的频率,输出该文本文件中所有单词的列表,并与出现次数一起打印出来
熟练掌握面向对象程序设计的编程思想,能够使用c++语法在编程中使用类、继承、重载、多态、模板等概念;熟练使用VC等集成环境进行编程。 要求: 1. 利用面向对象的方法对业务进行系统分析; 2. 对各个功能模块分析...
(1)掌握在自定义的类中重载提取运算符<<和插入运算符>> 并用它们输入 输出本类对象 2 掌握文件操作的步骤和方法 能利用程序建立数据文件 打开数据文件并进行相关操作
教程(文件) :television: 教程(视频) :wrapped_gift: 例程、代码 目录 3D_ToF C/C++ Embedded Python 3D ToF 原理 :laptop: :wrapped_gift: :wrapped_gift: 标定 :laptop: :laptop: 点云 :laptop: :laptop: :...
使用系统调用,用C或C++写一个程序,实现如下功能:从一个文件中读出数据,写入另一个文件中。 要求: 具有良好的交互性 使用者可输入源文件和目的文件的路径和文件名。 具有完善的错误处理机制 针对可能出现的各种...
基本要求 (1) 输入功能:能实现从键盘或文本文件输入代表大整数的字符串并用合适的结构存储,能实现输入整个表达式(含大整数和相应的运算符)。 (2) 输出功能:将算式及计算结果按照一定格式批量输出到屏幕及另一个文本...
本书有利于初学者尽快掌握c++的编程知识,养成良好的编程习惯;具备相当编程经验的人,也可以从本书了解到使用c++的更有效的方法。 译者序 前言 第1章 C++基础 1 1.1 C++简介 1 1.1.1 C++语言的起源 1 1.1.2 ...
程序运行后首先将文件系统的原始数据读取并保存到程序的结构体数组当中,所以应提供文件输入的操作;由于纸条数据零散,所以要对原始数据进行分类操作并提供一个数组用于保存分类信息;在程序中要进行统计工作,所以...
(2)灵活运用基本输入输出以及其修饰细节 (3)熟练掌握类的继承和定义构造析构成员 (4)熟练掌握经典菜单的使用 (5)熟练掌握磁盘文件的操作 (6)巩固向量与类共同封装操作数据的习惯 (7)进一步理解类的:...
语言本身并不重要,解决...■ 文件输入输出等。 通过学习本书,你不仅可以在C++方面达到初窥门径的效果,同时对计算机编程这门技艺也 会有一个全面而科学的认识。 如有侵权请联系/留言下架,上传实乃原版超清书籍。
选择取款功能操作进入取款界 面,并提供数据输入界面,等待用户输入取款金额,如果取款金额大于该用户卡上的 余额则不能取款,或者将新的余额写入文件,并将本次取款事件写入文件同时将取钱 的金额显示在页面上。...