fopen
函数原型
FILE *fopen(const char *path, const char *mode);
参数:
path:需要打开的文件路径
mode:文件打开方式(r 读 , w 写 , + 读和写,a 添加内容,b 二进制)
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。(常用)
rb+ 读写打开一个二进制文件,允许读数据。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
FILE *fp;//定义一个指向FILE结构的指针
// 在当前路径用可读可写打开一个“ccc.txt”的文件,如果不存在则创建它
fp=fopen("./ccc.txt","w+");
返回值
成功:它返回一个指向FILE结构的指针,该结构代表这个新创建的流
(文件顺利打开后,指向该流的文件指针就会被返回)
失败:它就会返回一个空指针,errno会提示问题的性质
(如果文件打开失败,则返回NULL,并把错误代码存在errno中)
fwrite
函数原型
size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);
ptr – 是一个指针,对fwrite来说,是要输出数据的地址。
size – 这是要读取的每个元素的大小,以字节为单位。
nmemb – 这是元素的个数,每个元素的大小为 size 字节。
stream – 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。
char *str="xixihaha!!!";
int write=fwrite(str,sizeof(char),strlen(str),fp);
//int write=fwrite(str,sizeof(char)*strlen(str),1,fp);
//这种也可以 不过这样write的值为1,write的值和第三个参数有关系
//如果第三个参数为100,输出的write就是100
printf("write=%d \n",write);
write=11
返回值
如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。
fread
函数原型
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
ptr – 是一个指针,对fread来说,它是读入数据的存放地址。
size – 这是要读取的每个元素的大小,以字节为单位。
nmemb – 这是元素的个数,每个元素的大小为 size 字节。
stream – 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。
char *readBuf=NULL;
char *str="xixihaha!!!";
readBuf=(char*)malloc(sizeof(char)*strlen(str));
//int read= fread(readBuf,sizeof(char)*strlen(str),1,fp);此时
第三个参数为1,那么read的值也是1,如果第三个参数改成2,输出结果read还是1
int read= fread(readBuf,sizeof(char),strlen(str),fp);
//read里,如果第三个参数为100,其输出结果也是11(有多少读多少)
printf("read=%d \n",read);
printf("%s\n",readBuf);
read=11
xixihaha!!!
返回值
成功读取的元素总数会以 size_t nmemb对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。
fclose
原型:int fclose(FILE*f);
返回值:对于输出流,fclose函数会在文件关闭前刷新缓冲区,
如果它执行成功,fclose返回0
fseek
函数原型
int fseek(FILE *stream, long offset, int whence);
第一个参数:stream为文件指针
第二个参数:offset为偏移量,整数表示右偏移,负数表示左偏移
第三个参数:
SEEK_SET 文件开头
SEEK_CUR 当前位置
SEEK_END 文件结尾
返回值
成功返回 0, 失败返回-1
fgetc()fputc()feof()
EOF
这个定义的意思是,文档的结尾都有一个隐藏字符”EOF”,当程序读取它的时候,就会知道文件已经到达结尾。通常使用while循环加EOF(通常为-1)判断作为读取结束的标志。
fgetc
ch=fgetc(fp);
从指定的文件读入一个字符,即从fp所指向的文件中读入一个字符赋给ch。
返回值
成功:返回值所得到的字符;
失败:返回EOF(-1)。
fputc
fputc(ch,fp);
把一个字符写到磁盘文件上去,即将字符ch输出到fp所指向的文件中去。
返回值
成功:返回值就是输出的字符;
失败:返回EOF(-1)。
feof
int main()
{
FILE *fp;
int i;
char c;
fp= fopen("./text.txt","r");
while(1){
c=fgetc(fp);//fgetc()读取字符后,光标会向后移动
if(feof(fp)){
//判断是否读到文件的末尾,如果
//没有到达文件尾巴返回0,到达尾巴返回一个非零的整数。
break;
}
printf("%c",c);
}
printf("\n");
fclose(fp);
return 0;
}