打开文件fopen
函数的声明:
FILE *fopen(const char *path,const char *mode);
path:路径。mode:模式
函数说明:fopen函数的共嗯是打开一个已经存在的文件,并返回这个文件的文件指针,或者创建一个文件,并打开此文件,然后返回文件的标识
函数的参数:
参数1:打开的文件的路径
A 绝对路径,即从根目录开始的路径名称。“例D:\\demo\\test\\aaa.txt”
在windows下的话,根目录就是指C盘D盘E盘等
B 相对路径 .\\test\\aaa.txt
点.是当前文件的意思,从当前文件开始
参数2:文件打开的方式,即以什么样的方式打开文件(只读,只写,可读可写等等)
第二个参数的几种形式
读写权限:r,w,a,+
r:以只读的方式打开文件,文件不存在则返回NULL,文件存在且打开成功则返回文件指针进行后续的读操作
例1:FILE *fp
fp=fopen("test.txt","r");
w:以只写方式打开文件
1、文件不存在,以指定文件文件名创建此文件,并且打开文件,但是不一定成功
2、若文件存在,清空文件内容,打开文件,然后进行写操作,但是也不一定成功
3、如果文件打不开(比如文件只读),返回NULL
例 FILE *fp
fp=fopen("test.txt","w");
a:以追加方式打开文件
1、文件不存在,以指定文件名创建此文件(同w)
2、若文件存在,从文件的结尾处进行操作(即读写)
说明:如果不加a的话打开文件的时候读写位置在文件的开始,对文件进行读写的时候就是从文件开始进行读写的。加上a,打开已经存在的文件,读写位置在文件的末尾
+:同时以读写打开指定文件
上图的b都是指以二进制形式打开
返回值
成功:打开的文件对应的文件指针
失败:返回NULL
以后调用fopen的时候,要判断打开是否成功
关闭文件fclose
函数的头文件:
#include<stdio.h>
函数的声明:int fclose(FILE *fp);
函数的说明:关闭fp所代表的文件,注意一个文件只能关闭一次,不能多次关闭。关闭之后就不能再对文件指针进行读写等操作了
返回值:成功返回0,失败返回非0
#include<stdio.h>
int main()
{
FILE* fp1;
int ret;
fp1 = fopen(".\\test.txt", "r+");
if (fp1 == NULL) {
printf("fopen失败");
return 0;
}
printf("打开文件test,txt成功\n");
ret = fclose(fp1);
if (ret == 0) {
printf("关闭文件成功");
}
else {
printf("关闭文件失败");
}
return 0;
}
一次读写一个字符
函数声明:int fgetc(FILE *stream)
函数声明:fgetc从stream所标识的文件中读取一个字节,将字节值返回
返回值:以t的方式,读到文件结尾返回EOF
以b(以二进制)的方式,读到文件结尾,使用feof(文件指针)判断结尾
feof是C语言标准库函数,其功能是检测文件流上的文件结束符,如果文件结束则返回非0 值,否则返回0
函数声明:int fputc(int c,FILE *stream)
函数的说明:fputc将c的值写到stream所代表的文件中
返回值:如果输出成功,则返回输出的字节值;如果输出失败,则返回一个EOF
例题:文件内容的复制代码
#include<stdio.h>
int main()
{
FILE* fp1, * fp2;
char ch;
fp1 = fopen("test.txt", "r");
if (fp1 == NULL) {
perror("fopen");//perror的作用是打印出错原因
return 0;
}
fp2 = fopen("test2.txt", "w");
if (fp2 == NULL) {
perror("fopen");
return 0;
}
while ((ch = fgetc(fp1)) != EOF) {
fputc(ch, fp2);
}//进行复制,只要ch不等于EOF
fclose(fp1);
fclose(fp2);
return 0;
}
一次读写一个字符串
char *fgets(char *s,int size,FILE *stream);
从stream所代表的文件中读取字符,在读取的时候碰到换行符或者是碰到文件的末尾停止读取,或者是读取了size-1个字节停止读取,在读取的内容后面回家一个\0;
返回值:成功返回目的数组的首地址,即s;失败返回NULL;
int fputs(const char *s,FILE *stream);
函数功能:将s指向的字符串,写道stream所代表的文件中
返回值:成功返回写入的字节数,失败返回-1
例题
#include<stdio.h>
int main()
{
FILE* fp_read, * fp_wirte;
char str[100];
fp_read = fopen("src.txt", "r");
if (fp_read == NULL) {
perror("fopen");
return 0;
}
fp_wirte = fopen("dest.txt", "w");
if (fp_wirte == NULL) {
perror("fopen");
return 0;
}
fgets(str, 6, fp_read);
printf("str=%s\n", str);
fputs(str, fp_wirte);
return 0;
}
读写文件fread
读文件函数说明:size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);
函数的说明:fread函数从stream所标识的文件中读取数据,每块是size个字节,共nmemb块,存 放到ptr指向的内存里
返回值:实际读到的块数
写文件函数说明:size_t fwirte(void *ptr,size_t size,size_t nmemb,FILE *stream);
函数的说明:fread函数从stream所标识的文件中读取数据,每块是size个字节,共nmemb块,存 放到ptr指向的内存里
返回值:实际读到的块数