当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

北京大学:《数据结构与算法》课程教学资源(实习讲义)文件操作

资源类别:文库,文档格式:PDF,文档页数:5,文件大小:201.22KB,团购合买
点击下载完整版文档(PDF)

文件的模式 Binary mod:文件中的每个比特都可以被程 文件操作 序访问到。比如 wav, bmp文件等。 ■ Text mode:存储的格式化的文本,程序所 操作的文本有可能和存储在文件系统中的 内容不一样(与操作平台相关) 高壮 ■Read:把文件上的回车和换行换成C/C++语 2007.10 中的回车和换 Write:把C/C++语言中的回车和换行换成文 件中的回车和换行 文件的模式 C语言的文件操作 ■在C语言中,文件的操作和结构体FE有不可分 ■一些常用的文件操作函数 size_t fwrite(const size t size, size t len, F size_t size, size_t len, FILE* fp) int fprintf(FIlE*ip, const char* format,; n int fscanf(FILE"fp, const char* format, ed scarahr'n o her heaving bosun ' r'n m int putc( int c, FILE. fp); C语言的文件操作 C语言的打开文件操作 ■一些常用的文件定位函数: a FILE *fopen( const char *filename, const char long ftell(FIlE*fp) *node ) ■参数 int fsetpos(FILE*fp const fpos_t*cur): 例子: 文件名 c( SEEK_CUR表示从当前位置向后核动个字 ■打开的模式,权限,格式 得到当前的文件位置 ■ Return value 勺读写位置。cur实际上是 对其运算,比如cur+ 指向打开的文件的指针,如果打开文件错 误,则返回NUI

1 文件操作 高壮 2007.10 文件的模式 „ Binary mod:文件中的每个比特都可以被程 序访问到。比如wav,bmp文件等。 „ Text mode:存储的格式化的文本,程序所 操作的文本有可能和存储在文件系统中的 内容不一样(与操作平台相关) „ Read: 把文件上的回车和换行换成C/C++语 言中的回车和换行 . „ Write: 把C/C++语言中的回车和换行换成文 件中的回车和换行. 文件的模式 C语言的文件操作 „ 在C语言中,文件的操作和结构体FILE有不可分 割的作用. „ 一些常用的文件操作函数: „ FILE * fopen(const char * filename, const char * openmode); „ size_t fwrite(const void * data, size_t size, size_t len, FILE * fp); „ size_t fread(void * date, size_t size , size_t len , FILE * fp); „ int fprintf(FILE * fp, const char * format, ...); „ int fscanf(FILE * fp, const char * format, ...); „ int putc( int c, FILE * fp); „ int getc( FILE * fp); „ int fclose(FILE * fp); C语言的文件操作 „ 一些常用的文件定位函数: „ long ftell(FILE *fp) „ int fseek(FILE * fp, long offset, int origin); „ int fgetpos(FILE * fp, fpos_t *cur); „ int fsetpos(FILE * fp const fpos_t *cur); „ 例子: „ fseek(fp,9,SEEK_CUR);表示从当前位置向后移动9个字 符;(其中SEEK_CUR 1;SEEK_END 2;SEEK_SET 0) „ fpos_t cur; fgetpos(fp,&cur);得到当前的文件位置, 可以通过fsetpos(fp,cur)设置fp的读写位置。cur实际上是 int64,所以可以对其运算,比如cur++; C语言的打开文件操作 „ FILE *fopen( const char *filename, const char *mode ); „ 参数 „ filename „ 文件名 „ mode „ 打开的模式,权限,格式 „ Return Value „ 返回一个指向打开的文件的指针,如果打开文件错 误,则返回NULL

文件的读写模式 文件的打开格式 一个文件用于读取数据,如果文件不存在,则打开失败,返回 ■以文本格式打开文件 杯在个商雋嬰淼孬释:果文件不存在,则创建新文件,如果文 ■以2进制的方式打开文件。不对文件的回车和换 打开一个文件用于追加数据,如果文件不存在,则创建新文件 行进行转换 打开一个文件进行读写,如果文件不存在,则打开失败,返回NUL 注意 轻开则需瓞蹉芟釋罗:果 t/b标签必须放在r/w/a的后面。 FIE*fp= fopen(stsr";wt);正确 打开一个文件用来读取或者追加数据,如果文件不存在,则创建新文 ■FIE*p= fopen( est. txt,"w),错误 C文件操作示例 C文件操作示例(续) #include ■■■ a fseek(Ep, 0, SEEK_SET) #inchude char str 2(100), str3 [1001 size_t len=fread(str 2, sizeof(char), strlen(str), fp); FILE'fp=fopen( test.txt", w+t); str2[en]=\0 printf"%os\n%os\n", str2, str3); char str= This is the test line fwrite(str, sizeof(char), strlen(str), p) ■ fprintf(p," print=°as"str C++的文件流操作 C++的文件流操作 s basic_fstream( const char * Filename, 可以创建的文件流包含 ios_base: : openmode_Mode= ios_ base in I ■输入文件流 ios_base: :out ) ifstream ifs( filename" ,ios base:in;两种打开方式 构造一个 basic_ istream类型 ■输出文件流 a Parameters a ofstream ofs (filename ,ios_base: out); ■输入输出文件流 要打开的文件名。 fstream fs; fs.open( filename ,ios_base base: out) Mode 打开模式, ios_hasesopenmode的一些枚举的组合

2 文件的读写模式 „ "r" „ 打开一个文件用于读取数据,如果文件不存在,则打开失败,返回 NULL。 „ "w" „ 打开一个文件用来写入数据,如果文件不存在,则创建新文件,如果文 件存在,则清空原始文件!!!。 „ "a" „ 打开一个文件用于追加数据,如果文件不存在,则创建新文件。 „ "r+" „ 打开一个文件进行读写,如果文件不存在,则打开失败,返回NULL。 „ "w+" „ 打开一个文件进行读写,如果文件不存在,则创建新文件,如果文件存 在,则清空原始文件!!!。 „ "a+" „ 打开一个文件用来读取或者追加数据,如果文件不存在,则创建新文 件。 文件的打开格式 „ t „ 以文本格式打开文件。 „ b „ 以2进制的方式打开文件。不对文件的回车和换 行进行转换。 „ 注意: „ t/b标签必须放在r/w/a的后面。 „ FILE *fp=fopen(“test.txt”,“wt”);正确 „ FILE *fp=fopen(“test.txt”,“tw”);错误 C文件操作示例 „ #include „ #include „ int main() „ { „ FILE *fp=fopen("test.txt","w+t"); „ if(!fp) „ { „ printf("erroe on openning!\n"); „ return -1; „ } „ char * str="This is the test line"; „ fwrite(str,sizeof(char),strlen(str),fp); „ fprintf(fp,"print= %s",str); C文件操作示例(续) „ fseek(fp,0,SEEK_SET); „ char str2[100],str3[100]; „ size_t len=fread(str2,sizeof(char),strlen(str),fp); „ str2[len]='\0'; „ fscanf(fp,"print = %s",str3); „ printf("%s\n%s\n",str2,str3); „ fclose(fp); „ return 0; „ } C++的文件流操作 „ basic_fstream( const char *_Filename, ios_base::openmode _Mode= ios_base::in | ios_base::out ); „ 构造一个basic_fstream类型. „ Parameters „ _Filename „ 要打开的文件名。 „ _Mode „ 打开模式, ios_base::openmode的一些枚举的组合. C++的文件流操作 „ 可以创建的文件流包含: „ 输入文件流: „ ifstream ifs(“filename”,ios_base::in);两种打开方式。 „ 输出文件流: „ ofstream ofs(“filename”,ios_base::out); „ 输入输出文件流: „ fstream fs; fs.open(“filename”,ios_base::in|ios_base::out)

文件打开模式 C的文件模式用C++表示 ■app追加模式,但是开始时,数据流指向文件首 a ios_base::out I ios_ base: trunc=w ■ate,追加模式,但是开始时,数据流指向文件的尾 m ios_base:out ios_base: app=a 兴二进制模式打开文件,默认的是以文本 a ios_base: in I ios__base:out I ios_base:trunc 输入模式。 s ios_ base: in I ios_ base:out I ios_base:app out输出模式。 trunc,如果文件不存在,则创建新文件。默认是 不创建的。如果文件存在,则清空其内容 C++文件的定位操作 C++文件的定位操作 a basic_istream: : seekg ■设置输出流的位置 ■设置输入流的位置 s basic_ostream& seekp( pos Pos ) ■ basic istream& seekg( pos_type_ Pos ) basic_ostream& seekp( off basic_istream& seekg( off_type_O, ios_base:seekdir_W ay); ios_base: seekdir-_W ay ) Parameters Ps:数据流中的位置 ■_O:偏移量 WFay:输出位置。 ios baser seekin的枚举 WFa:初始值 ios basesseekd C++文件的定位操作 C++文件的定位操作 pos_type tell(; ■在文件中偏移定位时的初始值: ■返回当前的位置。 ■ ios baser: beg,数组,流,文件的开始位置 ■注意: 数组,流,文件的当前位置 ■在输入输出流 fstream fs中 ■ ios base:end,数组,流,文件的结束位置 fs seekp和 fs seeke设置位置时将同时影响输入输 出的位置。(是不是内部是一个值在作用?) 取的位置,同样对于 ofstream ofs,只可以用 fs seekp设置写入的位置

3 文件打开模式 „ app,追加模式.,但是开始时,数据流指向文件首 部。 „ ate,追加模式,但是开始时,数据流指向文件的尾 部。 „ binary, 以二进制模式打开文件,默认的是以文本 模式打开。 „ in, 输入模式。 „ out,输出模式。 „ trunc, 如果文件不存在,则创建新文件。默认是 不创建的。如果文件存在,则清空其内容。 C的文件模式用C++表示 „ ios_base::in ="r" „ ios_base::out | ios_base::trunc = "w" „ ios_base::out | ios_base:: app ="a" „ ios_base::in | ios_base::out = "r+“ „ ios_base::in | ios_base::out | ios_base::trunc ="w+" „ ios_base::in | ios_base::out | ios_base::app = "a+" C++文件的定位操作 „ basic_ostream::seekp „ 设置输出流的位置。 „ basic_ostream& seekp( pos_type _Pos ); basic_ostream& seekp( off_type _Off, ios_base::seekdir _Way ); „ Parameters „ _Pos : 数据流中的位置.。 „ _Off : 偏移值.。 „ _Way : 输出位置。ios_base::seekdir的枚举。 C++文件的定位操作 „ basic_istream::seekg „ 设置输入流的位置. „ basic_istream& seekg( pos_type _Pos ); basic_istream& seekg( off_type _Off, ios_base::seekdir _Way ); „ Parameters „ _Off : 偏移量. „ _Pos : 数据流的绝对位置. „ _Way : 初始值 ios_base::seekdir. C++文件的定位操作 „ pos_type tellp( ); „ 返回当前的位置。 „ 注意: „ 在输入输出流fstream fs中。 „ fs.seekp和fs.seekg设置位置时将同时影响输入输 出的位置。(是不是内部是一个值在作用?) „ 对于输入流ifstream ifs,只可以用ifs.seekg设置读 取的位置,同样对于ofstream ofs,只可以用 ofs.seekp设置写入的位置。 C++文件的定位操作 „ 在文件中偏移定位时的初始值: „ ios_base::beg, 数组,流,文件的开始位置 „ ios_base:: cur, 数组,流,文件的当前位置. „ ios_base:: end,数组,流,文件的结束位置

C++文件的读取操作 C++文件的写入操作 a basic_istream& read( char_type*_Str, te( const char_ type *_Sir, streamsize_Count ) Parameters a Parameters ■保存数据的缓冲区 将要写入的数据 Count ■Cont 将要读取的数据量(以char,及字节为单位 写入的数据量,以字节为单位 ■思考 为什么read/ write的返回值不是nt,代表处理了多少个 数据?对照函数: size t fread(void*date, suze t siz size_t len, FILE*fp C++文件的写入操作 C++文件处理的示例 ■因为C++文件的操作符问题 C++的文件可以利用操作符来简单的使用: fs>>c;读取 ofs>str3: 起见,这里假设处理的是24bit的rgb非压缩的 printf"os\n os\n",str2, str3) 件格式 fs. close; return u ■为了p的简洁,后面的示例没有注释

4 C++文件的读取操作 „ basic_istream& read( char_type *_Str, streamsize _Count ); Parameters „ _Str „ 保存数据的缓冲区. „ _Count „ 将要读取的数据量(以char,及字节为单位). C++文件的写入操作 „ basic_ostream& write( const char_type *_Str, streamsize _Count ); „ Parameters „ _Str „ 将要写入的数据 „ _Count „ 写入的数据量,以字节为单位。 „ 思考: „ 为什么read/write的返回值不是int,代表处理了多少个 数据? 对照函数:size_t fread(void * date, size_t size , size_t len , FILE * fp); C++文件的写入操作 „ 因为C++文件的操作符问题. „ C++的文件可以利用操作符来简单的使用: „ ifs>>c; 读取c; „ ofs „ #include „ using namespace std; „ int main() „ { „ fstream fs("test.txt",ios_base::in|ios_base::out); „ if(!fs) „ { „ cout>str3; „ printf("%s\n%s\n",str2,str3); „ fs.close(); „ return 0; „ } bmp文件的处理示例 „ 问题: „ 对于一个bmp位图进行读写,掌握了这种方 法,以后,可以自己练习读写wav文件,并且 可以制作简单的wav文件处理程序。为了简单 起见,这里假设处理的是24bit的rgb非压缩的 bmp文件格式。 „ 为了ppt的简洁,后面的示例没有注释

bmp文件的处理示例 bmp文件的处理示例 cerro"Can not B 1COLOR anr main cour<<"This is NOT a bitmap filalI\n: bmp文件的处理示例 bmp文件的处理示例 NFOHEADER bitmapInfoHeader, ■处理结果 D(BITMAPINHEADER] nfoH leader, biHleightbitmapInfoHeader biW ithi++)

5 bmp文件的处理示例 „ #include „ #include „ #include „ using namespace std; „ typedef struct mycolor „ { „ char r; „ char g; „ char b; „ }COLOR; „ int main() „ { „ BITMAPFILEHEADER bitmapFileHeader; „ memset(&bitmapFileHeader,0,sizeof(BITMAPFILEHEADER)); „ fstream fs("test.bmp",ios_base::in|ios_base::out|ios_base::binary); bmp文件的处理示例 „ if(!fs) „ { „ cerr<<"Can not open the file\n"<<endl; „ return -1; „ } „ fs.read((char*)&bitmapFileHeader,sizeof(BITMAPFILEHEADER)); „ if(0x4d42==bitmapFileHeader.bfType) „ cout<<"This is a bitmap file\n"; „ else „ { „ cout<<"This is NOT a bitmap file!!\n"; „ fs.close(); „ return -1; „ } bmp文件的处理示例 „ BITMAPINFOHEADER bitmapInfoHeader; „ memset(&bitmapInfoHeader,0,sizeof(BITMAPINFOHEADER)); „ fs.read((char*)&bitmapInfoHeader,sizeof(BITMAPINFOHEADER)); „ cout<<dec<<"the bit of color is" „ <<bitmapInfoHeader.biBitCount<<endl; „ fs.seekp(bitmapFileHeader.bfOffBits,ios_base::beg); „ COLOR c; „ c.r=0x80; „ c.g=0x80; „ c.b=0x00; „ for(int i=0;i<bitmapInfoHeader.biHeight*bitmapInfoHeader.biWidth;i++) „ fs<<c.b<<c.g<<c.r; „ fs.close(); „ } bmp文件的处理示例 „ 处理结果

点击下载完整版文档(PDF)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
已到末页,全文结束
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有