C语言中操作文件

对于C编程者而言,文件分为文本文件和二进制文件。

,文本文件中存储的是ascii码,例如5678存储为对应的ascii码为00110101 00110110 00110111 00111000;文本文件可以more等工具读懂(由OS转换)
,二进制文件存储的就是二进制,编码格式通常由用户自己定义,如MySQL的binlog,这种文件用more读取后无法看懂(因为OS不知道怎么转换)

C语言中操作上面两类文件,存在两大函数阵营,fopen系列及open系列。fopen系列可以认为是open系列的上层封装,open系列函数更注重底层字节流的操作。

fopen系列常用函数包括:
fopen() 打开流
fclose() 关闭流
fputc() 写一个字符到流中
fgetc() 从流中读一个字符
fseek() 在流中定位到指定的字符
fputs() 写字符串到流
fgets() 从流中读一行或指定个字符
fprintf() 按格式输出到流
fscanf() 从流中按格式读取
feof() 到达文件尾时返回真值
ferror() 发生错误时返回其值
rewind() 复位文件定位器到文件开始处 
fread() 从流中读指定个数的字符
fwrite() 向流中写指定个数的字符

open系列函数和上面差不多,只是缺少了fprintf(), fscanf()这样的高层函数,下面就说说这两大阵营函数的不同
,fopen系列都是操作FILE*指针,其中如fprintf(), fscanf()可以用于格式化输出和输入,也有如fread(), fwrite()的流操作函数,提供了更丰富的功能
,open系列操作的是int fd,只有底层草组函数,如write, read, lseek等,但这些函数更加灵活,不像fopen系列,没有更多的限制

因此,open系列函数更适合底层、对二进制文件的操作,而fopen系列适合对文本文件的格式化操作。举例来说:
,fopen函数提供的打开方式有r,w,a,当采用w打开文件时,如果文件存在,会将文件清空,否则创建一个文件,但有时不像清空文件,所以只能用a操作,而a操作的限制是,无法使用fseek随机写文件,也就是说,以a打开文件后只能采用追加写的方式;而open则提供了更为细致的flag设置,可以实现上面功能
,open系列没有提供格式化操作功能,如果文件中存在以\t分隔的几行数据,则无法一下读出,且读出后还要自己做类型转换。而用fscanf就不必,可以使用fscanf(file, "%s\t%d\n%s\t%u", s1, &i, s2, &u); 如果成功返回值为4(解析出的项数),否则返回-1

你可能感兴趣的:(C++,c,OS,C#,D语言)