文件操作 高壮 2007.10
文件操作 高壮 2007.10 2007.10
文件的模式 Binary mod:文件中的每个比特都可以被程 序访问到。比如wav,bmp文件等。 Text mode:存储的格式化的文本,程序所 操作的文本有可能和存储在文件系统中的 内容不一样(与操作平台相关) Read把文件上的回车和换行换成C/C++语 中的回车和换 Write:把C/C++语言中的回车和换行换成文 件中的回车和换行
文件的模式 Binary mod Binary mod:文件中的每个比特都可以被程 :文件中的每个比特都可以被程 序访问到。比如 序访问到。比如wav,bmp wav,bmp文件等。 Text mode Text mode:存储的格式化的文本,程序所 :存储的格式化的文本,程序所 操作的文本有可能和存储在文件系统中的 操作的文本有可能和存储在文件系统中的 内容不一样(与操作平台相关) 内容不一样(与操作平台相关) Read: 把文件上的回车和换行换成 把文件上的回车和换行换成C/C++语 言中的回车和换行 言中的回车和换行 . Write: 把C/C++语言中的回车和换行换成文 语言中的回车和换行换成文 件中的回车和换行 件中的回车和换行
文件的模式 MS-DOS text file Rebecca clutched therin jewel encrusted scarablrin o her heaving bosun. rin I Rebecca clutched thelr\n Rebecca clutched the\n jewel encrusted scarab\n jewel-encrusted scarabln ITo her heaving bosun rln ITo her heaving bosun.n Binary mode in C Text mode in C
文件的模式 Rebecca clutched the\r\n jewel_encrusted scarab\r\n To her heaving bosun.\r\n ^Z Rebecca clutched the\r\n jewel_encrusted scarab\r\n To her heaving bosun.\r\n ^Z Rebecca clutched the\n jewel_encrusted scarab\n To her heaving bosun.\n Binary mode in C Text mode in C MS-DOS text file
C语言的文件操作 在C语言中,文件的操作和结构体FILE有不可分 割的作用 些常用的文件操作函数: FILE fopen(const char filename, const char openmode) Size_t fwrite(const void* data, size_t size, size_t len, FILE X 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 K format,; int putc(int C, FILE fp); int getc( FILE * fp); a int fclose(File fp)
C语言的文件操作 语言的文件操作 在C语言中,文件的操作和结构体 语言中,文件的操作和结构体FILE有不可分 割的作用. 一些常用的文件操作函数: 一些常用的文件操作函数: FILE * fopen(const fopen(const char * filename, const char * char * filename, const char * openmode openmode); size_t fwrite(const fwrite(const void * data, void * data, size_t size, size_t len, FILE * , FILE * fp); size_t fread(void fread(void * date, * date, size_t size , size_t len , FILE * , FILE * fp); int fprintf(FILE fprintf(FILE * fp, const char * format, ...); , const char * format, ...); int fscanf(FILE fscanf(FILE * fp, const char * format, ...); , const char * format, ...); int putc( int c, FILE * c, FILE * fp); int getc( FILE * ( FILE * fp); int fclose(FILE fclose(FILE * fp);
C语言的文件操作 些常用的文件定位函数 long stelle FILE * tp It 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 CUR1 SEEK END2 SEEK SET0) ■ fpos t cur; getpos(f,&cm得到当前的文件位置, 可以通过 fsetpos(pcu设置印p的读写位置。cur实际上是 nt64,所以可以对其运算,比如cur++;
C语言的文件操作 语言的文件操作 一些常用的文件定位函数: 一些常用的文件定位函数: long ftell(FILE ftell(FILE *fp) int fseek(FILE fseek(FILE * fp, long offset, , long offset, int origin); origin); int fgetpos(FILE fgetpos(FILE * fp, fpos_t *cur); int fsetpos(FILE fsetpos(FILE * fp const fpos_t *cur); 例子: fseek(fp,9,SEEK_CUR); fseek(fp,9,SEEK_CUR);表示从当前位置向后移动 表示从当前位置向后移动9个字 符;(其中SEEK_CUR 1;SEEK_END 2;SEEK_SET 0 SEEK_CUR 1;SEEK_END 2;SEEK_SET 0) fpos_t cur; cur; fgetpos(fp,&cur fgetpos(fp,&cur);得到当前的文件位置, 得到当前的文件位置, 可以通过fsetpos(fp,cur fsetpos(fp,cur)设置fp的读写位置。cur实际上是 int64,所以可以对其运算,比如 ,所以可以对其运算,比如cur++;
C语言的打开文件操作 FILE *fopen const char filename, const char 米m0d) 参数 a filename ■文件名 ■me ■打开的模式,权限,格式 ■ Return value ■返回一个指向打开的文件的指针,如果打开文件错 误,则返回NUIL
C语言的打开文件操作 语言的打开文件操作 FILE *fopen( const ( const char *filename filename, const char *mode ); 参数 filename filename 文件名 mode 打开的模式,权限,格式 打开的模式,权限,格式 Return Value Return Value 返回一个指向打开的文件的指针,如果打开文件错 返回一个指向打开的文件的指针,如果打开文件错 误,则返回NULL
文件的读写模式 打开一个文件用于读取数据,如果文件不存在,则打开失败,返回 ■打开一个文件用来写入数据,如果文件不存在,则创建新文件,如果文 件存在,则清空原始文件 ■打开一个文件用于追加数据,如果文件不存在,则创建新文件 ■"r+ 打开一个文件进行读写,如果文件不存在,则打开失败,返回NULL 红于则菇棒?:如果文件不存在,则创建新文件,如果文件存 a 开一个文件用来读取或者追加数据,如果文件不存在,则创建新文
文件的读写模式 文件的读写模式 "r" 打开一个文件用于读取数据,如果文件不存在,则打开失败,返回 NULL。 "w" 打开一个文件用来写入数据,如果文件不存在,则创建新文件,如果文 件存在,则清空原始文件!!!。 "a" 打开一个文件用于追加数据,如果文件不存在,则创建新文件。 "r+" 打开一个文件进行读写,如果文件不存在,则打开失败,返回NULL。 "w+" 打开一个文件进行读写,如果文件不存在,则创建新文件,如果文件存 在,则清空原始文件!!!。 "a+" 打开一个文件用来读取或者追加数据,如果文件不存在,则创建新文 件
文件的打开格式 ■以文本格式打开文件。 b ■以2进制的方式打开文件。不对文件的回车和换 行进行转换。 汪 t/b标签必须放在r/w/a的后面。 FIE*fp= fopen( test. txt,wt");正确 FIE*fp= fopen( test. txt";tw”);错误
文件的打开格式 文件的打开格式 t 以文本格式打开文件。 以文本格式打开文件。 b 以 2进制的方式打开文件。不对文件的回车和换 进制的方式打开文件。不对文件的回车和换 行进行转换。 注意: t/b标签必须放在r/w/a的后面。 FILE *fp =fopen( “test.txt test.txt”,“wt ”);正确 FILE *fp =fopen( “test.txt test.txt”,“tw ”);错误
C文件操作示例 #includes stdio.h> #include int mainO FILE fp=fopen("test. txt", w+t); printf( erroe on openning!\n return-1 char strs/Ir This is the test line fwrite(str, sizeof(char), strlen(str), p) fpr printf(p, print=%/os",str)
C文件操作示例 #include #include int main() { FILE *fp=fopen("test.txt","w+t fopen("test.txt","w+t"); if(!fp) { printf("erroe printf("erroe on openning! openning!\n"); return -1; } char * str="This is the test line"; ="This is the test line"; fwrite(str,sizeof(char),strlen(str),fp fwrite(str,sizeof(char),strlen(str),fp); fprintf(fp,"print fprintf(fp,"print= %s",str);
C文件操作示例(续) a fseek(p, O,SEEK_SET) har str2100,st:3{1001 size_t len=fread(str2, sizeof(char), strlen(str), fp) str2[]='\ fscanf(fp, print=%os",str3) printf("%/os(n%os\n", str2, str3) fclose(tp) return o
C文件操作示例(续) 文件操作示例(续) fseek(fp,0,SEEK_SET); fseek(fp,0,SEEK_SET); char str2[100],str3[100]; char str2[100],str3[100]; size_t len=fread(str2,sizeof(char),strlen(str),fp); =fread(str2,sizeof(char),strlen(str),fp); str2[len]=' str2[len]='\0'; fscanf(fp,"print fscanf(fp,"print = %s",str3); = %s",str3); printf("%s printf("%s\n%s\n",str2,str3); n",str2,str3); fclose(fp fclose(fp); return 0; return 0; }