C++文件操作ppt课件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
cerr:ostream类对象,处理标准出错信息,提供不带缓冲区 的输出;
clog:ostream类对象,处理标准出错信息,提供带缓冲区的 输出;
C++
C++文件流的继承结构
fstreambase:虚基类; filebuf:提供对文件的缓冲支持; ifstream、ofstream、fstream:写入与读出
C++
程序设计基础
第九部分
-HNUSS- 湖南长沙.湖南大学软件学院
C++
数据层次 文件和流
2020/3/27
内容
C++
数据层次
粒度从小到大
比特 (位/Bit) 1 or 0 稳定的电路 Character set字符集 –数字、字母和专门的符号
字节(Byte: 8 bits) 1个字符型数据的存储单元(char)
使用上述对象需要
#include<fstream>
2020/3/27
C++
打开文件
方式一
ifstream infile;
ofsream outfile;
fstream file; in(“my”); out(“my”); (“my”, ios::in);
//打开一个只读文件 //打开一个只写文件 //以只读方式打开
2020/3/27
C++
ostream
ostream (输出文件)类:
seekp(long streampos); 将文件定位指针移动到strampos所指定的位置。
seekp(long streamoff, seek_dir); 将文件定位指针按seek_dir确定的方向移动streamoff位置;
in( );
out( );
方案3:(只适用于文本文件)
char buff[300]; while(in(buff,300)) //从源文件中读取一行,不含‘\n’ outfile<<buff<<'\n'; //字符;
in( );
out( );
2020/3/27
C++
二进制文件操作
C++的文件类对象可能通过成员函数read( )和write( )实现对 二进制文件的读写操作是的,函数的原型为:
ios:对流状态进行设置,虚基类;
streambuf:提供对数据的缓冲支持;
istream、ostream、iostream:提取与插入
ios
streambuf
istream
ostream
iostream
cin:istream类对象,处理标准输入,即键盘输入;
cout:ostream类对象,处理标准输出,即屏幕输出;
fstreambase
ifstream
ofstream
fstream
C++
字符文件和二进制文件
字符文件:又称ASCII文件或文本TEXT文件
以一个字节存放一个ASCII码,代表一个字符。例如,32767需 要使用5个字节表示,即: 51 50 55 54 55 (十进制表示的 ASCII),而浮点数136.56需要使用6个字节表示,即49 51 54 46 53 54。
……; }
打开文件后 务必需要检 查文件状况
2020/3/27
C++
样例程序
例:编写程序,读取源程序文件并复制到目的文件中去。
#include<iostream> #include<fstream> using namespace std; int main() {
char [256], [256]; cout<<"输入源文件名:"; cin>>; cout<<"输入目的文件名:"; cin>>; ifstream in); if(!infile){ cout<<"不能打开输入文件:"<<<<'\n'; exit(-1);} ofstream out); if(!outfile){ cout<<"不能打开输出文件:"<<<<'\n'; exit(-2);} in(ios::skipws); //设置为不要跳过文件的空格 char ch; while(infile>>ch) //当到达文件结尾时,infile>>ch的返回值为0,结束循环;
2020/3/27wenku.baidu.com
C++
文件操作的保护
在打开文件后,通常要判断打开是否成功。若打开成功, 则文件类对象的值为非零值;若打开不成功,则其值为0 。为此,打开文件的格式可以写为:
ifstream f1(“”); if(!f1) //打开文件失败
{ cout<<“不能打开文件:”<<“”<<‘\n’;
} else//成功打开文件 {
ios::binary
指定文件以二进制方式打开,而不是缺省说明的文本方式。
2020/3/27
C++
打开文件相关选项
每一种打开方式是以一个二进制位来表示的,所以可以用 二进制位或运算“|”将允许的几种方式组合起来使用。如
//打开一个输出文件并将指针移到文件尾 fstream file(“my”, ios::out | ios::ate); //打开一个二进制文件用于输入 fstream file(“my”, ios::in | ios::binary); //打开一个输出文件并清除原有内容 fstream file(“my”, ios::out | ios::trunc);
cout<<"不能打开输出文件:data.dat\n";
exit(-1); } for(int i=2;i<=500;i+=2)
将整数的地址转换 成字符型指针
out((char *)&i,sizeof(int));
out( );
return 0;
}
2020/3/27
C++
向文件输出2到500之间的偶数
system("pause");
return 0;}
2020/3/27
C++
随机文件访问
在文件信息区中存在一个用于指示当前文件读取位置的指 针变量,称为文件定位指针,C++语言不仅允许按文件 中信息的先后顺序来进行读写,同时也允许从文件中的任 何位置开始进行数据的读写操作,这种读写方式就称为文 件的随机访问。C++的istream和ostream类中分别提 供了几个支持文件随机访问的成员函数。
程序员以字符为单位建立程序和数据项,计算机按位模式操作和 处理这些字符
C++
数据层次
域(Field/字段): 一组有意义的字符
name
记录(Record): 一组相关域的组合
class in C++ 一个学生的信息: name、no、college、hometown 记录关键字(key): 唯一标识、检索
outfile<<ch; //否则其返回值不为0,继续循环。 in( ); out( ); return 0; }
2020/3/27
C++
其他解决方案
处理文件复制问题的另外两个方案:
方案2:(适用于任何类型的文件)
char ch; while(in(ch))
out(ch);
//成员函数完成从源文件中字符读取, //这样将不会自动跳过空格。 //将ch中的字符写到目的文件中。
ios::trunc
如果文件已存在,则被截为0;如果指定ios::out,同时没有 设置ios::app, ios::ate, ios::in,则该模式是隐含的。
ios::nocreate 如果文件不存在,则打开文件失败(不创建新文件)。
ios::noreplace 如果文件存在,打开时只能设置为ios::ate及ios::app方式。
#include<iostream>
#include<fstream>
using namespace std; int main(int)
以二进制模式输出 至c:\data.txt文件
{
ofstream outfile("d:\\data.txt",ios::out|ios::binary);
if(!outfile){
二进制文件
是指以数据在内存中存储形式原样输出(存放)到文件上去,例 136.56是一个float型实数,它在内存中占有4个字节长度。将该 4个字节按其在内存中的原来形式存放到文件中。无论该float型 数有多大,都只占用4个字节。
2020/3/27
C++
数据存在形式
ASCII文件中的存在方式
3(51)
ios::out
打开文件用于输出(写)操作。如果文件存在,并且没有设 置ios::app, ios::ate,ios::in值,则文件被截掉。
ios::ate
如果文件存在,将不被截掉。文件定位指针位于文件尾,新 的数据可写到文件中任何位置。
ios::app
如果文件存在,将不被截掉。文件定位指针位于文件尾,新 的数据附加到文件尾(不可重写已存在的文件数据)。
文件: 相关记录的集合
社团的成员联系表 班级的年度学习成绩统计表
数据库(Database): 相关文件的集合
全校的学生基本信息表
C++
Sally Tom Judy Iris Randy
Black Blue Green Orange Red
Judy Green
Judy
Field
Byte (ASCII character J)
2(50)
整数32767在内存 中的存储形式
7(55)
二进制文件中保存方式
6(54)
7(55)
2020/3/27
C++
文件操作
为了调用磁盘文件,缓冲文件系统为每一个文件开辟了一 个“文件信息区”,用来存放与文件操作有关的信息。
在C++中,头文件fstream.h中定义了文件类(型),包 括:
ifstream: 它支持从输入文件中提取数据的各种操作 ofstream:它支持把数据写入文件中的各种操作; fstream: 支持数据的输入与输出操作
exit(-1);}
int a[250];
in((char *)a,sizeof(int)*250);
for(int i=0;i<250;i++){ cout<<a[i]<<'\t';
将整数的地址转换 成字符型指针
if((i+1)%10==0) cout<<'\n';}
cout<<'\n';
in( );
方式二
ifstream infile(“my”);
ofstream outfile(“my”);
fstream file(“my”, ios::in);
2020/3/27
C++
打开文件相关选项
枚举常量名 含义
ios::in
打开文件用于输入(读)操作。如果文件存在,将不被截掉, 文件定位指针位于文件首,新的数据可写到文件中任何位置。
read(char *buf, int size);
功能:从文件中读取由size所指定的字节数据到buf所指向的存储 单元中。
write(char *buf, int size);
功能:将由buf所指向的存储单元中的size个字节数据写入到文件 中。
2020/3/27
C++
向文件输出2到500之间的偶数
in(100,ios::cur); //文件定位指针从当前位置后移100个字节
out(-100,ios::end); //文件定位指针从文件尾开始前移100个字节 前移:指文件定位指针从文件尾向文件头方向移动(streamoff为 负值); 后移:指文件定位指针从文件头向文件尾方向移动;
tellp( ); 返回输出文件中,文件定位指针当前的位置。
Seek_dir 枚举常量值
功能
ios::beg
0
文件开头
ios::cur
1
文件指针的当前位置
ios::end
2
文件尾
2020/3/27
C++
文件指针移动
in(500); //文件定位指针移到距文件头500个字节处
in(-100,ios::cur); //文件定位指针从当前位置前移100个字节
#include<iostream>
#include<fstream>
using namespace std; int main(int) {
以二进制模式输出 至d:\data.txt文件
ifstream infile("d:\\data.txt",ios::binary);
if(!infile){ cout<<"不能打开输入文件:data.dat\n";
1 Bit
2020/3/27
数据层次
File Record
C++
文件和流
文件:字节流
Ends with end-of-file marker
0123456789
... n-1
...
end-of-
流:数据从一个对象流动到另一个对象,这种流动抽象为流 。
cin>>a;
cout<<a;
C++
C++流的继承结构
2020/3/27
C++
istream
istream (输入文件)类:
seekg(long streampos); 将文件定位指针移动到strampos所指定的位置。 seekg(long streamoff, seek_dir); 将文件定位指针按seek_dir确定的方向移动streamoff位置; tellg( ); 返回输入文件中,文件定位指针当前的位置。
相关文档
最新文档