c 文件操作stdio
1:FILE *fopen(const char *filename, const char *mode) 指定模式mode打开filename 文件流
int fclose(FILE *stream) 关闭流 stream。刷新所有的缓冲区。
FILE * f = NULL; f = fopen("test.txt", "w"); if (f) { printf("success"); } fclose(f);
2:clearerr(FILE *stream) 清除给定流 stream 的文件结束和错误标识符。
int ferror(FILE *stream) 测试给定流 stream 的错误标识符,返回0,没有错误标识
void perror(const char *str) 输出错误到标准流
FILE * f = NULL; f = fopen("test.txt", "w+"); char c; c = fgetc(f); if (ferror(f)) { //写入模式,fgetc时错误 perror("打开文件失败"); }
int feof(FILE *stream) 测试给定流 stream 的文件结束标识符,返回0,没有错误标识
FILE * f = NULL; char c; f = fopen("test.txt", "r"); while (1) { c = fgetc(f); if (ferror(f)) { break; } printf("%c \n"); } fclose(f);
:3:int rename(const char *old_filename, const char *new_filename) 修改文件名返回零成功
int ret = rename("ccc.txt", "aaa.txt"); if (ret == 0) { printf("文件重命名成功"); }
4: int remove(const char *filename) 删除给定的文件返回零成功
if (remove("aaa.txt")== 0) { printf(" 删除成功"); }
5:
int fgetpos(FILE *stream, fpos_t *pos) 获取流 stream 的当前文件位置
int fsetpos(FILE *stream, const fpos_t *pos) 设置给定流 stream 的文件位置为给定的位置
FILE *fp; fpos_t position; fp = fopen("file.txt", "w+"); if (fp) { fputs("Hello,World", fp); fgetpos(fp, &position); fsetpos(fp, &position); fputs("继续写入", fp); fclose(fp); }
6:long int ftell(FILE *stream) 返回stream的当前文件位置int fseek(FILE *stream, long int offset, int whence) 设置流 stream 的文件从whence偏移offset的字节,成功则该函数返回零,whence包括:文件的开头SEEK_SET,文件指针的当前位置SEEK_CUR,文件的末尾SEEK_END
void rewind(FILE *stream) 设置stream 文件位置到文件的开头
FILE *fp; int len; fp = fopen("file.txt", "w+"); if (fp) { fputs("AABBCC", fp); len = ftell(fp); //6 fseek(fp, 7, SEEK_CUR); len = ftell(fp); //6+7 fputs(" DD EE FF", fp); len = ftell(fp); // rewind(fp); len = ftell(fp);//0 fclose(fp); }
7:sprintf() 与sscanf() snprintf()
int sprintf(char *str, const char *format, ...) 格式化组合字符串到str
int sscanf(const char *str, const char *format, ...) 格式化拆分字符串
int snprintf(char *str, size_t size, const char *format, ...)格式化组合字符串到str,size 为要写入的字符的最大数目,超过 size 会被截断。
const char str[256] = { 0 }; sprintf(str, "a = %d,b = %f ", 10, 2.13f); printf("%s", str); //a = 10,b = 2.130000
char name[128] = { 0 }; int age = 0 ; int classnum = 0 ; const char info[] = { "peat 25 2" }; sscanf(info,"%s %d %d ", name,&age, &classnum); printf("name : %s ,age : %d ,classnum : %d", name,age,classnum); //name : peat, age : 25, classnum : 2
const char str[256] = { 0 }; snprintf(str,5, "a = %d,b = %f ", 10, 2.13f);//实际写入size-1个并添加一个字符串结束符 \0 printf("%s", str);
8:int setvbuf()定义流 stream的缓冲类型,如果成功,则该函数返回 0,setvbuf(FILE *stream, char *buffer, int mode, size_t size)
buffer -- 这是分配给用户的缓冲。如果设置为 NULL,该函数会自动分配一个指定大小的缓冲。
mode -- 这指定了文件缓冲的模式:
_IOFBF:全缓冲
_IOLBF:行缓冲
_IONBF:无缓冲
char buf[BUFSIZ]; FILE *fp; fp = fopen("file.txt", "w+"); if (fp) { setvbuf(fp, buf, _IOFBF, BUFSIZ); fprintf(fp, "%s", "第一条信息"); fprintf(fp, "%s", "www"); fprintf(fp, "%s", "结尾"); fflush(fp); //刷新流 fclose(fp); }
9:
char *tmpnam(char *str) 生成并返回一个有效的临时文件名
FILE *tmpfile(void) 以二进制更新模式(wb+)创建临时文件。

浙公网安备 33010602011771号