c语言库函数访问文件
文件的创建和打开
FILE *fopen(const char *filename,const char *mode)
filename:文件名
mode:打开模式
常见的打开方式:
r,rb 只读
w,wb 只写,如果文件不存在就创建
a,ab 追加,如果文件不存在就创建
r+,r+b,rb+ 读写方式打开
w+,w+b,wh+ 读写方式打开,文件不存在则创建
a+,a+b,ab+ 读和追加方式打开,文件不存在则创建
读文件
(b表示二进制文件)
size_t fread(void *ptr,size_t size,size_t n,FILE *stream)
stream:源文件
n:读取字段数
size: 每个字段的字节数
ptr:目标字符数组
返回实际读取的字节数
写文件
size_t fwrite(const void *ptr,size_t size,size_t n,FILE *stream)
ptr:源数组
n:字段数
size:字段的字节数
stream:目标文件
返回实际写入字段数
从文件读字符
int fgetc(FILE *stream)
向指定文件写入字符号
int fputc(int c,FILE *stream)
格式化读
int fscanf(FILE *stream,char *format[,argument...])
从一个流中进行格式化输入
C的文本读写和二进制读写
- 因为文本文件与二进制文件的区别仅仅是编码上不同,所以他们的优缺点就是编码的优缺点,这个找本编码的书来看看就比较清楚了。一般认为,文本文件编码基于字符定长,译码容易些;二进制文件编码是变长的,所以它灵活,存储利用率要高些,译码难一些(不同的二进制文件格式,有不同的译码方式)。
- C的文本方读写与二进制读写的差别仅仅体现在回车换行符的处理上.文本方式写时,每遇到一个'' ''(0AH换行符),它将其换成'' ''(0D0AH,回车换行),然后再写入文件;当文本读取时,它每遇到一个'' ''将其反变化为'' '',然后送到读缓冲区.二进制读写时,其不存在任何转换,直接将写缓冲区中数据写入文件。
- 总地来说,从编程的角度来说,C中文本或二进制读写都是缓冲区与文件中二进制流的交互,只是文本读写时有回车换行的转换.所以当写缓冲区中无换行符'' ''(0AH),文本写与二进制写的结果是一样的,同理,当文件中不存在'' ''(0DH0AH)时,文本读与二进制读的结果一样。