C语言中的各种文件读写方法小结
前言 C-File I/O FILE* open(const char* name,const char* mode); name参数是你希望打开的文件或设备的名字。mode参数标识流用于只读、只写还是既读又写,以及它是文本流还是二进制流。下面表格里列出了一些常用的模式: 如果fopen函数执行成功,它将返回一个指向FILE结构的指针,该结构代表这个新创建的流。如果函数执行失败,它将返回一个NULL指针,error会提示问题的性质。 int fclose(FILE *f); 对于输出流,fclose函数在文件关闭之前刷新缓冲区。如果它执行成功,fclose返回零值,否则返回EOF。 由于fopen和fclose打开和关闭的都是FILE结构体指针,而在stdio.h头文件中,包含了对文件结构体FILE的描述。这里介绍一下FILE结构体定义: struct _iobuf { char *_ptr; // 下一个要被读取的字符的地址 int _cnr; // 剩余的字符 char *base; // 缓冲区基地址 int _flag; // 读写文件标志位 int _file; // 文件号 int _charbuf; // 检查缓冲区的状况 int _bufsiz; // 文件的大小 char *_tmpfname; // 临时文件名 }; typedef struct _iobuf FILE; 字符I/O int fgetc(FILE *stream); int getc(FILE *stream); int getchar(void); 需要操作的流作为参数传递给getc和fgetc,但是getchar始终是从标准输入读取。每个函数从流中读取下一个字符,并把它作为函数的返回值返回。如果流中不存在更多的字符,函数就返回常量值EOF(-1)。 int fputc(int character,FILE* stream); int putc(int character,FILE* stream); int putchar(int character); 行I/O int fscanf(FILE* stream,const char* format,...); int scanf(const char* format,...); int sscanf(const char* string,...); 这些函数都从输入源读取字符并根据format字符串给出的格式化代码对它们进行转换。当格式化字符串到达末尾或者读取的输入不再匹配格式字符串所指定的类型时,输入就停止。在任何一种情况下,被转换的输入值的数目作为函数的返回值返回。如果在任何输入值被转换之前文件就已经到达尾部,函数就返回常量值EOF。 int fprintf(FILE *stream,...); int printf(const char* format,...); int sprintf(char* buffer,...); 二进制I/O size_t fread(void* buffer,size_t size,size_t count,FILE* stream); size_t fwrite(void* buffer,FILE* stream); buffer是一个指向用于保存数据的内存位置的指针,size是缓冲区中每个元素的字节数,count是读取或写入的元素数,stream是数据读取或写入的流。 int fflush(FILE* stream); 当我们需要立即把输出缓冲区的数据进行物理写入时,应该使用这个函数。 int fseek(FILE* stream,long offset,int from); fseek函数允许你在一个流中定位。这个操作将改变下一个读取或写入的位置。它的第一个参数是需要改变的流,它的第二个和第三个参数标识文件中需要定位的位置。下表描述了fseek参数的使用方法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |