码迷,mamicode.com
首页 > 编程语言 > 详细

C++笔记(9):IO输入输出流

时间:2017-05-07 10:21:53      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:etc   缓冲   内容   显示器   c++   binary   一段   cout   默认   

                  输入输出流

C++的输入输出流是IO系统向用户提供一个统一的接口,它隔离了具体的设备差异。
包括标准输入输出流和文件流。
标准输入输出流

istream是输入流类,cin就是istream类型的对象。
ostream是输出流类,cout是ostream类型的对象。
 
在C++中允许用户重载运算符“<<”和“>>”,实现对象的输入和输出。

重载这二个运算符时,在对象所在的类中,将重载这二个运算符的函数说明该类的友元函数。
 

 

C++在头文件fstream.h中定义了C++的文件流类体系 ,当程序中使用文件时,要包含头文件fstream.h 。

其中定义了各种文件操作运算符及函数。

在涉及文本文件的操作时,将输入文件看成键盘,将输出文件看成显示器,格式不变。只需在程序中增加打开与关闭文件的语句。
文件可以分为两大类:文本文件、二进制文件。
 
定义文件对象
有三种类型的对象:
fstream file;//既可读又可写。
ifstream infile;//可读不可写。
ofstream outfile;//可写不可读。
 
打开文件
ifstream infile;
infile.open(“C:\\myfile.txt"); //与文件建立关联
ofstream outfile;
outfile.open(“myoutfile.txt”);
 
读写文件
Std::string str;
Infile>>str;//从文件流中输入。
 
Outfile<<str;
 
关闭文件
Infile.close();
Outfile.close();
关闭后释放文件对象,取消与文件的关联。
 
定义fstream对象后,既可以对文件读又可以写。因此在open时需要给定打开的方式:
fstream  file1,file2;//定义了两个文件类的对象
file1.open(“file1.txt”,  ios::in);//用于输入
pile2.open(“file2.txt”, ios::out);//用于输出
 
在open时常常会因为文件不存在,或正在被占用而打开失败。
可以通过对文件对象进行判断来得知是否打开成功。
file1.open(“file.txt”, ios::in);
if(!file1)

  //文件打开失败。
}
 
有一个约定:
在打开文件进行读时,若文件不存在则打开失败。
写时,若文件不存在则新建一个文件。若存在则删除原来的文件的内容。
 
文本文件与二进制文件读取方法不同:
读写文本文件
从文件读取一个字符:file.getch(ch);
读取一行数据:File.getline(str);
从文件读取时,当读取到文件尾时,函数返回值为0,可以据此来判断循环结束。
向文件写入一个字符:file.put(ch);
 
实例,实现两个文件的拷贝
 
 
打开二进制文件
若在文件的open方法时没有特别说明,默认打开的文本文件,若要打开二进制文件,则要特别说明。
fstream   infile,outfile;
infile.open(“inf1.dat”,  ios::in| ios::binary);
outfile.open(“outf1.dat”,  ios::out| ios::binary);
ios::out和ios::in表示IO模式。枚举类型,多个枚举值可以使用运算符”|“组合使用。  
 
二进制文件的关闭
关闭方法都一样,调用close方法。
 
二进制文件的读写
二进制文件的读写与文本文件不同,使用专门的方法。
infile.read( char *buff,   int nNum);
buff存储数据的缓冲,nNum为要读取的长度,返回实际读取的数据长度。
infile.read(&Stuinfo, sizeof(Stuinfo));
infile.read(pBuff, 1024*sizeof(char));
 
向文件写入数据:
outfile.write( pBuff, nLen );
write返回实际写入的数据长度。
 
二进制文件的结束
infile.eof( )    
当到达文件结束位置时,该函数返回一个非零值;否则返回零。
 
文件指针
打开文件之后,读取或写入一段数据之后,文件指针都会移动到读取或写入的数据的末尾。
如file.read(pBuff, 1024);
读取成功之后,文件指针向后偏移1024字节。
 
file.write(pBuff, 10);
写入成功之后,文件指针向后偏移10个字节。
 
读写方法可以自动的移动文件指针,除此之外还可以通过一个专门的函数随机的移动文件指针。
infile.seekg(nNum, ios::cur);
nNum为移动的字节数。
ios::cur表示从当前位置。还有另外两个相对位置:ios::begin ,ios::end;
infile.seekg(10, ios::begin);//相对文件开始将文件指针移动10个字节。
infile.seekg(-20, ios::end);//相对文件结束,向前移动20字节
 
实例,实现两个二进制文件的拷贝。
 

C++笔记(9):IO输入输出流

标签:etc   缓冲   内容   显示器   c++   binary   一段   cout   默认   

原文地址:http://www.cnblogs.com/hustercn/p/6819287.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!