ofstream和ifstream详细用法
- 格式:pdf
- 大小:154.88 KB
- 文档页数:4
C++文件操作详解(ifstream 、ofstream 、fstream )C++通过以下几个类支持文件的输入输岀:ofstream: 写操作(输岀)的文件类 ifstream:读操作(输入)的文件类fstream: 可同时读写操作的文件类 打开文件(Open a file )对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来, 也就是说打开一个文件。
被打开的文件在程序中由一个流对象(stream object )来表示(这些类的一个实例),而对这个流对象所做的任何输入输岀操作实际就是对该文件所做的操作。
要通过一个流对象打开一个文件,我们使用它的成员函数 open ():void ope n (const char * file name, ope nm ode mode );这里file name 是一个字符串,代表要打开的文件名, mode 是以下标志符的一个组合:ios::i n 为输入(读)而打开文件 ios::out 为输岀(写)而打开文件 ios::ate 初始位置:文件尾 ios::app 所有输岀附加在文件末尾 ios::tru nc 如果文件已存在则先删除该文件 ios::b inary二进制方式这些标识符可以被组合使用,中间以 ”或”操作符(|)间隔。
例如,如果我们想要以二进制方式打开文件"example.bin" 来写入一些数据,我们可以通过以下方式调用成员函数open ()来实现:ofstream file;file.ope n ("example.b in ”,ios::out | ios::app | ios::b in ary ); ofstream, ifstream 和fstream 所有这些类的成员函数 ope n 都包含了一个默认打开文件的方式,这三个类的默认方式各不相同:类参数的默认方式ofstream i os::out | ios::trunc ifstream i os::infstream ios::i n | ios::out只有当函数被调用时没有声明方式参数的情况下,默认值才会被采用。
C++文件操作详解〔ifstream、ofstream、fstream〕C++ 通过以下几个类支持文件的输入输出:•ofstream: 写操作〔输出〕的文件类(由ostream引申而来)•ifstream: 读操作〔输入〕的文件类(由istream引申而来)•fstream: 可同时读写操作的文件类(由iostream引申而来)翻开文件(Open a file)对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也就是说翻开一个文件。
被翻开的文件在程序中由一个流对象(stream object)来表示(这些类的一个实例) ,而对这个流对象所做的任何输入输出操作实际就是对该文件所做的操作。
要通过一个流对象翻开一个文件,我们使用它的成员函数open():void open (const char * filename, openmode mode);这里filename 是一个字符串,代表要翻开的文件名,mode 是以下标志符的一个组合:这些标识符可以被组合使用,中间以〞或〞操作符(|)间隔。
例如,如果我们想要以二进制方式翻开文件"example.bin" 来写入一些数据,我们可以通过以下方式调用成员函数open〔〕来实现:ofstream file;file.open ("example.bin", ios::out | ios::app | ios::binary);ofstream, ifstream 和fstream所有这些类的成员函数open 都包含了一个默认翻开文件的方式,这三个类的默认方式各不一样:只有当函数被调用时没有声明方式参数的情况下,默认值才会被采用。
如果函数被调用时声明了任何参数,默认值将被完全改写,而不会与调用参数组合。
由于对类ofstream, ifstream 和fstream 的对象所进展的第一个操作通常都是翻开文件,这些类都有一个构造函数可以直接调用open 函数,并拥有同样的参数。
fstream头文件用法fstream头文件是C++标准库中的一个头文件,用于处理文件输入输出操作。
它提供了三个类,ifstream(用于从文件中读取数据)、ofstream(用于向文件中写入数据)和 fstream(同时具有读写功能的文件操作类)。
要使用 fstream 头文件,首先需要包含它:C++。
#include <fstream>。
接下来,你可以使用这个头文件中定义的类来进行文件的读写操作。
首先,你需要创建一个文件流对象,并打开一个文件。
例如,如果你想要从文件中读取数据,你可以使用 ifstream 类:C++。
std::ifstream infile;infile.open("input.txt");这将打开一个名为 "input.txt" 的文件,使得你可以从中读取数据。
如果你想要向文件中写入数据,你可以使用 ofstream 类:C++。
std::ofstream outfile;outfile.open("output.txt");这将创建一个名为 "output.txt" 的文件,使得你可以向其中写入数据。
如果你需要同时进行读写操作,你可以使用 fstream 类: C++。
std::fstream file;file.open("data.txt");这将打开一个名为 "data.txt" 的文件,使得你可以进行读写操作。
一旦你打开了文件,你就可以使用流操作符(<< 和 >>)来进行数据的读写操作,就像你操作标准输入输出流一样。
例如,你可以用 << 操作符将数据写入文件,用 >> 操作符从文件中读取数据。
完成文件操作后,你应该关闭文件,以释放资源。
你可以使用close() 方法来关闭文件流:C++。
ifstream ofstream读写原理引言概述:ifstream和ofstream是C++中用于读取和写入文件的输入输出流类。
它们提供了一种便捷的方式来读取和写入文件,使得操作文件变得简单和高效。
本文将介绍ifstream和ofstream的读写原理,并详细阐述其六个大部分。
正文内容:1. 输入输出流类的概述1.1 输入输出流类的定义和作用1.2 文件的读写操作过程2. ifstream类的读取原理2.1 打开文件并关联流2.2 判断文件是否成功打开2.3 读取文件内容3. ifstream类的常用读取方法3.1 逐行读取文件3.2 读取特定数据类型3.3 移动文件指针4. ofstream类的写入原理4.1 打开文件并关联流4.2 判断文件是否成功打开4.3 写入文件内容5. ofstream类的常用写入方法5.1 写入字符串5.2 写入特定数据类型5.3 移动文件指针6. ifstream和ofstream类的关闭操作6.1 关闭文件流6.2 检查文件流是否关闭6.3 避免资源泄露总结:1. ifstream和ofstream是C++中用于读取和写入文件的输入输出流类。
2. 通过打开文件并关联流,可以进行文件的读取和写入操作。
3. ifstream类适用于读取文件,常用方法包括逐行读取和读取特定数据类型。
4. ofstream类适用于写入文件,常用方法包括写入字符串和写入特定数据类型。
5. 在使用完ifstream和ofstream类后,应及时关闭文件流,以避免资源泄露和文件损坏。
C++⽂件读写详解(ofstream,ifstream,fstream)相关的头⽂件:#include <fstream>需要相关的类fstream提供三种类,实现C++对⽂件的操作ofstream:写操作,由ostream引申⽽来ifstream:读操作,由istream引申⽽来fstream :同时读写操作,由iostream引申⽽来⽂件的类型:⽂本⽂件和⼆进制⽂件⽂件读写的步骤:1、包含的头⽂件:#include <fstream>2、创建流3、打开⽂件(⽂件和流关联)4、读写 (写操作:<<,put( ), write( ) 读操作: >> , get( ),getline( ), read( ))5、关闭⽂件:把缓冲区数据完整地写⼊⽂件,添加⽂件结束标志,切断流对象和外部⽂件的连接⽂件的读写:1、⽂本⽂件的读写:⽅法:⼀次性读写若⼲字符1)使⽤运算符<< 和 >>进⾏读写功能:<< 能实现以⾏为单位写⼊⽂件>> 不能⼀⾏为单位读⼊内存,总是以空格、Tab、回车结束,⽽是以单词为单位代码:函数功能:使⽤<< ,写⼊⽂件⼀⾏字符#include <fstream>#include <iostream>using namespace std;void main(){ ofstream OpenFile("file.txt"); if (OpenFile.fail()) { cout<<"打开⽂件错误!"<<endl; exit(0); } OpenFile<<"abc def ghi"; OpenFile.close(); system("pause");}运⾏结果:⽂件中写⼊内容:abc def ghi函数功能:使⽤>>,从⽂件读⼊⼀个单词#include <fstream>#include <iostream>using namespace std;void main(){ const int len=20; char str[len];ifstream OpenFile("file.txt"); if (OpenFile.fail()){cout<<"打开⽂件错误!"<<endl;exit(0);}OpenFile>>str;cout<<str<<endl;OpenFile.close();system("pause");}运⾏结果:str的内容为abc,⽽不是abc def ghi(见空格停⽌)2)使⽤运算符<<(写)和getline()进⾏读写功能:<<:以⾏为单位输⼊⽂件getline():以⾏为单位读⼊内存,能⼀次读⼊⼀⾏函数原型:istream &getline( char *buffer, streamsize num );功能:getline( )函数⽤于从⽂件读取num-1个字符到buffer(内存)中,直到下列情况发⽣时,读取结束:1):num - 1个字符已经读⼊2):碰到⼀个换⾏标志3):碰到⼀个EOF代码:#include <fstream>#include <iostream>using namespace std;void main(){ const int len=20; char str[len];ifstream OpenFile("file.txt"); if (OpenFile.fail()){cout<<"打开⽂件错误!"<<endl;exit(0);}OpenFile.getline(str,20);cout<<str<<endl;OpenFile.close();system("pause");}运⾏结果:str的内容为abc def ghi (⼀直把⼀⾏读完)⼀次读写⼀个字符:使⽤get( )和put( )函数函数声明:istream& get(char &c);函数功能:使⽤ get( )函数把字符1输⼊到⽂件#include <fstream>#include <iostream>using namespace std;void main(){ char ch='1';ofstream OpenFile("file.txt"); if (OpenFile.fail()){cout<<"打开⽂件错误!"<<endl;exit(0);}OpenFile.put(ch);OpenFile.close();system("pause");}运⾏结果:把字符1写⼊⽂件函数功能:使⽤ put( )函数把⽂件中第⼀个字符输⼊内存#include <fstream>#include <iostream>using namespace std;void main(){ char ch;ifstream OpenFile("file.txt"); if (OpenFile.fail()){cout<<"打开⽂件错误!"<<endl;exit(0);}OpenFile.get(ch);cout<<ch;OpenFile.close();system("pause");}运⾏结果:把字符1从⽂件中读到ch(内存)中2、⼆进制⽂件的读写:1)使⽤运算符get( ) 和 put( )读写⼀个字节功能:get( ) :在⽂件中读取⼀个字节到内存函数原型:ifstream &get(char ch)put( ) :在内存中写⼊⼀个字节到⽂件函数原型:ofstream &put(char ch)代码:功能:把26个字符写⼊⽂件中#include <fstream>#include <iostream>using namespace std;void main(){ char ch='a';ofstream OpenFile("file.txt",ios::binary); if (OpenFile.fail()){cout<<"打开⽂件错误!"<<endl;exit(0);} for (int i=0;i<26;i++){OpenFile.put(ch);ch++;}OpenFile.close();system("pause");}运⾏结果:⽂件内容为abcdefghijklmnopqlst...z 功能:把⽂件中的26个字母读⼊内存#include <fstream>#include <iostream>using namespace std;void main(){ char ch;ifstream OpenFile("file.txt",ios::binary); if (OpenFile.fail()){cout<<"打开⽂件错误!"<<endl;exit(0);} while (OpenFile.get(ch))cout<<ch;OpenFile.close();system("pause");}运⾏结果:ch依次为abc...z2)使⽤read()和write()进⾏读写 read( ):功能:从⽂件中提取 n 个字节数据,写⼊buf指向的地⽅中函数声明:istream & read ( char * buf , int n ) ;代码:函数功能:使⽤write( )函数,⼀次从内存向⽂件写⼊⼀⾏数据#include <fstream>#include <iostream>using namespace std;void main(){ char ch[12]="12 3 456 78";ofstream OpenFile("file.txt"); if (OpenFile.fail()){cout<<"打开⽂件错误!"<<endl;exit(0);}OpenFile.write(ch,12);OpenFile.close();system("pause");}运⾏结果:⽂件内容12 3 456 78write( ):功能:把buf指向的内容取n个字节写⼊⽂件函数声明:ostream & ostream :: write ( char * buf , int n ) ;参数说明:buf表⽰要写⼊内存的地址,传参时要取地址。
用ifstream 和ofstream 读写中文的总结:首先读写中文应为wifstream 和ofstream。
下面的我也不知道为什么?但是可以正常使用、#include<iostream>#include<iomanip>#include<fstream>using namespace std;int main(){setlocale(LC_ALL,"chs");//设置wcout,能正常显示中文wchar_t ch ,str[]={ L"一二三四五六七八"};wofstream outfile("letter.txt");outfile.imbue(std::locale("chs")); //可以正常写入if (!outfile){cout << "不能建立文件!"<<endl;exit(1);}outfile.write(str,wcslen(str));outfile.flush();outfile.close();locale loc("chs");wifstream infile;infile.imbue(loc);//可以正常读出infile.open("letter.txt");if (!infile){cout << "不能打开文件!"<<endl;exit(1);}infile.seekg(0,ios::beg);infile.read(&ch,1);wcout << L"第一个字符是:" << ch <<endl;infile.close();}另外还有一些东西:char ch2;wchar_t ch;cout << sizeof(ch2) <<endl; // 1cout << sizeof(ch)<<endl; //2cout << sizeof(L'中')<<endl; //2cout << sizeof(L"中")<<endl;//4cout << sizeof('中')<<endl; //4最奇怪的一个cout << sizeof("中国人")<<endl; //5cout << wcslen(L"中") <<endl; //1有意思!。
c中文件流基本用法(fstream,ifstream,ostream)c++文件流基本用法(fstream,ifstream,ostream)前言:c++的文件流处理其实很简单,前提是你能够理解它。
文件流本质是利用了一个buffer中间层。
有点类似标准输出和标准输入一样。
c++IO的设计保证IO效率,同时又兼顾封装性和易用性。
本文将会讲述c++文件流的用法。
有错误和疏漏的地方,欢迎批评指证。
需要包含的头文件:名字空间:std也可以试用fstream提供了三个类,用来实现c++对文件的操作。
(文件的创建,读写)。
ifstream--从已有的文件读ofstream--向文件写内容fstream-打开文件供读写支持的文件类型实际上,文件类型可以分为两种:文本文件和二进制文件.文本文件保存的是可读的字符,而二进制文件保存的只是二进制数据。
利用二进制模式,你可以操作图像等文件。
用文本模式,你只能读写文本文件。
否则会报错。
例一:写文件声明一个ostream变量1.调用open方法,使其与一个文件关联2.写文件3.调用close方法.1.#include2.3.void main4.{5.ofstream file;6.7.file.open("file.txt");8.9.file<<"Hello file/n"<<75;10.11.file.close();12.}可以像试用cout一样试用操作符<<向文件写内容. Usages:1.2.file<<"string/n";3.file.put('c');例二:读文件1.声明一个ifstream变量.2.打开文件.3.从文件读数据4.关闭文件.1.#include2.3.void main4.{5.ifstream file;6.char output[100];7.int x;8.9.file.open("file.txt");10.11.file>>output;12.cout<<output;< p="">13.file>>x;14.cout<<x;< p="">15.16.file.close();17.}同样的,你也可以像cin一样使用>>来操作文件。
在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:1、插入器(<<)向流输出数据。
比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'n';就表示把字符串"Write Stdout"和换行字符('n')输出到标准输出流。
2、析取器(>>)从流中输入数据。
比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。
在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。
下面就把此类的文件操作过程一一道来。
一、打开文件在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:void open(const char* filename,int mode,int access);参数:filename:要打开的文件名mode:要打开文件的方式access:打开文件的属性打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:ios::app:以追加的方式打开文件ios::ate:文件打开后定位到文件尾,ios:app就包含有此属性ios::binary:以二进制方式打开文件,缺省的方式是文本方式。
两种方式的区别见前文ios::in:文件以输入方式打开(文件数据输入到内存)ios::out:文件以输出方式打开(内存数据输出到文件)ios::nocreate:不建立文件,所以文件不存在时打开失败ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败ios::trunc:如果文件存在,把文件长度设为0可以用“或”把以上属性连接起来,如ios::out|ios::binary打开文件的属性取值是:0:普通文件,打开访问1:只读文件2:隐含文件4:系统文件可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。
1.ios::app ----写入的数据将被追加在文件的末尾,此方式使用ios::out2.ios::ate ----写入的数据将被追加在文件的末尾,此方式不使用ios::out但是我看不懂最后一句,什么叫使用和不使用“ios::out”呢??ios::out本身不是就是打开一个可写文件吗?既然都能追加写入了,还能不让写?1.1.ios::app ----写入的数据将被追加在文件的末尾,此方式使用ios::out2.ios::ate ----写入的数据将被追加在文件的末尾,此方式不使用ios::outios::app 多个线程或者进程对一个文件写的时候,假如文件原来的内容是abc,第一个线程(进程)往里面写了个d,第二个线程(进程)写了个e的话,结果是abcdeios:ate的话,后面写的回覆盖前面一个写的,还是上面那个例子的话(第二个后写)结果为abce 2.ofstream流,以ios::app打开(或者“ios::app|ios::out”),如果没有文件,那么生成空文件;如果有文件,那么在文件尾追加。
以ios::app|ios::in打开,不管有没有文件,都是失败。
以ios::ate打开(或者”ios::ate|ios::out”),如果没有文件,那么生成空文件;如果有文件,那么清空该文件以ios::ate|ios::in打开,如果没有文件,那么打开失败;如果有文件,那么定位到文件尾,并可以写文件,但是不能读文件ifstream流,以ios::app打开(“ios::app|ios::out”),不管有没有文件,打开都是失败。
以ios::ate打开(“ios::ate|ios::out”),如果没有文件,打开失败如果有文件,打开成功,并定位到文件尾,但是不能写文件fstream流,默认是ios::in,所以如果没有文件,ios::app和ios::ate都是失败,以ios::app|ios::out,如果没有文件则创建文件,如果有文件,则在文件尾追加以ios::ate|ios::out打开,如果没有文件则创建文件,如果有,则清空文件。
ofstreamifstream⽂本⼆进制⽅式读⼊写出数据⽅法⽂件 I/O 在C++中⽐烤蛋糕简单多了。
在这篇⽂章⾥,我会详细解释ASCII和⼆进制⽂件的输⼊输出的每个细节,值得注意的是,所有这些都是⽤C++完成的。
⼀、ASCII 输出 为了使⽤下⾯的⽅法, 你必须包含头⽂件<fstream.h>(译者注:在标准C++中,已经使⽤<fstream>取代< fstream.h>,所有的C++标准头⽂件都是⽆后缀的。
)。
这是 <iostream.h>的⼀个扩展集, 提供有缓冲的⽂件输⼊输出操作. 事实上, <iostream.h> 已经被<fstream.h>包含了,所以你不必包含所有这两个⽂件, 如果你想显式包含他们,那随便你。
我们从⽂件操作类的设计开始, 我会讲解如何进⾏ASCII I/O操作。
如果你猜是"fstream," 恭喜你答对了!但这篇⽂章介绍的⽅法,我们分别使⽤"ifstream"?和 "ofstream" 来作输⼊输出。
如果你⽤过标准控制台流"cin"?和 "cout," 那现在的事情对你来说很简单。
我们现在开始讲输出部分,⾸先声明⼀个类对象。
ofstream fout; 这就可以了,不过你要打开⼀个⽂件的话, 必须像这样调⽤ofstream::open()。
fout.open("output.txt"); 你也可以把⽂件名作为构造参数来打开⼀个⽂件.ofstream fout("output.txt"); 这是我们使⽤的⽅法, 因为这样创建和打开⼀个⽂件看起来更简单. 顺便说⼀句, 如果你要打开的⽂件不存在,它会为你创建⼀个, 所以不⽤担⼼⽂件创建的问题. 现在就输出到⽂件,看起来和"cout"的操作很像。
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:1、插入器(<<) 向流输出数据。
比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。
2、析取器(>>) 从流中输入数据。
比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。
在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。
下面就把此类的文件操作过程一一道来。
一、打开文件 在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:void open(const char* filename,int mode,int access);参数:filename: 要打开的文件名mode: 要打开文件的方式access: 打开文件的属性打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:ios::app: 以追加的方式打开文件ios::ate: 文件打开后定位到文件尾,ios:app就包含有此属性ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。
两种方式的区别见前文ios::in: 文件以输入方式打开(文件数据输入到内存)ios::out: 文件以输出方式打开(内存数据输出到文件)ios::nocreate: 不建立文件,所以文件不存在时打开失败ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败ios::trunc: 如果文件存在,把文件长度设为0 可以用“或”把以上属性连接起来,如ios::out|ios::binary 打开文件的属性取值是:0:普通文件,打开访问1:只读文件2:隐含文件4:系统文件 可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。
例如:以二进制输入方式打开文件c:\config.sysfstream file1;file1.open("c:\\config.sys",ios::binary|ios::in,0); 如果open函数只有文件名一个参数,则是以读/写普通文件打开,即:file1.open("c:\\config.sys"); <=> file1.open("c:\\config.sys",ios::in|ios::out,0); 另外,fstream还有和open()一样的构造函数,对于上例,在定义的时侯就可以打开文件了:fstream file1("c:\\config.sys"); 特别提出的是,fstream有两个子类:ifstream(input file stream)和ofstream(outpu file stream),ifstream默认以输入方式打开文件,而ofstream默认以输出方式打开文件。
ifstream file2("c:\\pdos.def");//以输入方式打开文件ofstream file3("c:\\x.123");//以输出方式打开文件 所以,在实际应用中,根据需要的不同,选择不同的类来定义:如果想以输入方式打开,就用ifstream来定义;如果想以输出方式打开,就用ofstream来定义;如果想以输入/输出方式来打开,就用fstream来定义。
二、关闭文件 打开的文件使用完成后一定要关闭,fstream提供了成员函数close()来完成此操作,如:file1.close();就把file1相连的文件关闭。
三、读写文件 读写文件分为文本文件和二进制文件的读取,对于文本文件的读取比较简单,用插入器和析取器就可以了;而对于二进制的读取就要复杂些,下要就详细的介绍这两种方式 1、文本文件的读写 文本文件的读写很简单:用插入器(<<)向文件输出;用析取器(>>)从文件输入。
假设file1是以输入方式打开,file2以输出打开。
示例如下:file2<<"I Love You";//向文件写入字符串"I Love You"int i;file1>>i;//从文件输入一个整数值。
这种方式还有一种简单的格式化能力,比如可以指定输出为16进制等等,具体的格式有以下一些操纵符 功能 输入/输出dec 格式化为十进制数值数据 输入和输出endl 输出一个换行符并刷新此流 输出ends 输出一个空字符 输出hex 格式化为十六进制数值数据 输入和输出oct 格式化为八进制数值数据 输入和输出setpxecision(int p) 设置浮点数的精度位数 输出 比如要把123当作十六进制输出:file1<<hex<<123;要把3.1415926以5位精度输出:file1<<setpxecision(5)<<3.1415926。
2、二进制文件的读写①put() put()函数向流写入一个字符,其原型是ofstream &put(char ch),使用也比较简单,如file1.put('c');就是向流写一个字符'c'。
②get() get()函数比较灵活,有3种常用的重载形式: 一种就是和put()对应的形式:ifstream &get(char &ch);功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符。
如file2.get(x);表示从文件中读取一个字符,并把读取的字符保存在x中。
另一种重载形式的原型是: int get();这种形式是从流中返回一个字符,如果到达文件尾,返回EOF,如x=file2.get();和上例功能是一样的。
还有一种形式的原型是:ifstream &get(char *buf,int num,char delim='\n');这种形式把字符读入由 buf 指向的数组,直到读入了 num 个字符或遇到了由 delim 指定的字符,如果没使用 delim 这个参数,将使用缺省值换行符'\n'。
例如:file2.get(str1,127,'A'); //从文件中读取字符到字符串str1,当遇到字符'A'或读取了127个字符时终止。
③读写数据块 要读写二进制数据块,使用成员函数read()和write()成员函数,它们原型如下:read(unsigned char *buf,int num);write(const unsigned char *buf,int num); read()从文件中读取 num 个字符到 buf 指向的缓存中,如果在还未读入 num 个字符时就到了文件尾,可以用成员函数 int gcount();来取得实际读取的字符数;而 write() 从buf 指向的缓存写 num 个字符到文件中,值得注意的是缓存的类型是 unsigned char *,有时可能需要类型转换。
例:unsigned char str1[]="I Love You";int n[5];ifstream in("xxx.xxx");ofstream out("yyy.yyy");out.write(str1,strlen(str1));//把字符串str1全部写到yyy.yyy中in.read((unsigned char*)n,sizeof(n));//从xxx.xxx中读取指定个整数,注意类型转换in.close();out.close();四、检测EOF 成员函数eof()用来检测是否到达文件尾,如果到达文件尾返回非0值,否则返回0。
原型是int eof();例: if(in.eof()) ShowMessage("已经到达文件尾!");五、文件定位 和C的文件操作方式不同的是,C++ I/O系统管理两个与一个文件相联系的指针。
一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。
每次执行输入或输出时,相应的指针自动变化。
所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是seekg()和seekp()。
seekg()是设置读位置,seekp是设置写位置。
它们最通用的形式如下: istream &seekg(streamoff offset,seek_dir origin); ostream &seekp(streamoff offset,seek_dir origin); streamoff定义于 iostream.h 中,定义有偏移量 offset 所能取得的最大值,seek_dir 表示移动的基准位置,是一个有以下值的枚举:ios::beg: 文件开头ios::cur: 文件当前位置ios::end: 文件结尾 这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能与预想的值不同。
例: file1.seekg(1234,ios::cur); //把文件的读指针从当前位置向后移1234个字节file2.seekp(1234,ios::beg); //把文件的写指针从文件开头向后移1234个字节。