c语言中的文件操作
c语言处理文件的两种方式–文本视图和二进制视图
标准文件:c语言自动为我们打开了三个文件,这三个文件是标准输入、标准输出、标准出错。
1.如何打开和关闭一个文件
FILE *fp=NULL;
fp=fopen("/home/jack/hello.c","r");
fclose(fp);
打开方式有很多种,还可以二进制打开”rb”。此处不一一列举。
2.读写文本文件与二进制文件
FILE *fp=NULL;
fp 是一个文件指针。其指向了打开的文件。一起文件的操作皆通过文件指针fp完成。当通过getc读取一个文件时,文件指针会自动+1,指向下一个字节。putc也同理。
例如,可以通过fp进行内容的读写。
2.1getc与fgetc读取文件
getc(fp);
fgetc(buf,MAX,fp);
#include <stdio.h>
int main() {
FILE *fp;
fp = fopen("hello", "r");
char ch;
while ((ch=getc(fp))!=EOF){
putchar(ch);
}
fclose(fp);
}
2.2putc与fputc写入文件
putc(fp);
fputc(buf,fp);
#include <stdio.h>
#include <string.h>
int main() {
FILE *fp;
fp = fopen("hello", "w");
char *s = "hello world...";
int len = strlen(s);
for (int i = 0; i < len; i++) {
putc(s[i], fp);
}
fclose(fp);
}
3.二进制I/O-fread与fwrite
fread(buffer,255,1,fp);//读取一个255字节的buffer
fwrite(buffer,sizeof(double),10,fp);//写入10个double
4.操作文件指针
fseek设置文件指针的位置
fseek(fp,number,SEEK_END);//结尾+number
fseek(fp,number,SEEK_SET);//开始+number
fseek(fp,number,SEEK_CUR);//当前位置+number
ftell获取文件指针的位置
int index;
index=ftell(fp);
5.fprintf,fscanf从指定流读取内容
#include <stdio.h>
#include <malloc.h>
int main() {
char *string = (char *) malloc(20);
fscanf(stdin, "%s", string);
fprintf(stdout, "%s", string);
}
6.feof与ferror–检测是否到达文件结尾
当标准输入函数返回EOF时,通常已经表示到达文件结尾。但是这也有可能表示读取发生了错误。如何判断时哪种情况呢?feof与ferror可以帮助我们判断。
feof(fp);
ferror(fp);
当到达文件结尾时,feof(fp)返回非零值,否则返回0;当出错时,ferror(fp)返回0,否则返回非零值。