前言
在C语言中,文件操作是通过stdio库中提供的一组函数来实现的。这些函数可以用于创建、打开、读取、写入和关闭文件,以及进行其他与文件操作相关的任务。今天我就来给大家讲解一下文件操作。
文件是以硬盘为载体存储在计算机上的信息集合,文件可以是文本文档、图片、程序之类的,把数据卸载文件上十分的方便,需要的时候就添加,不需要的时候就删除,而且可以想保存多久就存多久。
文件分为两类,一类是程序文件,另一类是数据文件。
程序文件:包裹源程序文件,目标文件和可执行程序。
数据文件:指用于存储和组织数据的文件。它可以包含不同类型的数据,例如文本、数字、图像等。文件操作指的就是对数据文件进行操作。
文件指针,其定义采用这样的格式:FILE*
FILE是一个已经被定义过的结构体,而文件指针则是指向该结构体的指针,文件的信息可以保存到这个结构体里,那么我们就需要先打开文件。这就需要用到我们的fopen函数。
FILE * fopen ( const char * filename, const char * mode );
他的第一个参数是文件名(就是文件名的意思,你也可以包含文件目录),第二个参数表示你要使用的方式,有以下几种方式。
简单给大家写个例子 FILE * pf = fopen("date.txt","w");
另外,我们还需要进行错误处理,以处理可能出现的文件打开错误,如果成功打开文件,那么会返回一个有效地址,如果失败就会返回NULL。
既然打开了文件,再不用的时候我们就需要将其关闭,并且释放文件资源。这时候我们需要用到fclose函数。
int fclose ( FILE * stream );
使用方法:fclose(pf); pf = NULL;
在结束操作后关闭文件,并确保文件资源的正确释放。
那么我们要怎么对文件进行读写操作呢?我们可以用到下面这下函数。
下面我来给大家挨个展示他们的用法。
fputc和fgetc
int main()
{
FILE* pf = fopen("date.txt", "w+");//打开文件
if (pf == NULL)//判断是否打开成功
{
printf("打开失败");
return 1;
}
fputc('a', pf);//将字符存进文件
fputc('a', pf);
fputc('a', pf);
fputc('a', pf);
fputc('a', pf);//现在文件中是aaaaa
fclose(pf);//关闭文件
pf = NULL;//置为空
return 0;
}
int main()
{
FILE* pf = fopen("date.txt", "w+");//打开文件
if (pf == NULL)//判断是否打开成功
{
printf("打开失败");
return 1;
}
char arr[5];
arr[0] = fgetc("pf");//读取数据
arr[1] = fgetc("pf");
arr[2] = fgetc("pf");
arr[3] = fgetc("pf");
arr[4] = fgetc("pf");//现在arr数组里存的是aaaaa
fclose(pf);//关闭文件
pf = NULL;//置为空
return 0;
}
fputs和fgets
int main()
{
FILE* pf = fopen("date.txt", "w+");//打开文件
if (pf == NULL)//判断是否打开成功
{
printf("打开失败");
return 1;
}
fputs("aaaaa", pf);//再文件中放入字符串
fclose(pf);//关闭文件
pf = NULL;//置为空
return 0;
}
int main()
{
FILE* pf = fopen("date.txt", "w+");//打开文件
if (pf == NULL)//判断是否打开成功
{
printf("打开失败");
return 1;
}
char* a;
fgets(a, 5, pf);//a现在指向的字符串为aaaaa
fclose(pf);//关闭文件
pf = NULL;//置为空
return 0;
}
fscanf和fprintf
int main()
{
FILE* pf = fopen("date.txt", "w+");//打开文件
if (pf == NULL)//判断是否打开成功
{
printf("打开失败");
return 1;
}
char arr[] = "aaaaa";
int a = 5;
fprintf(pf, "%s %d", arr, a);//将字符串和整形以格式化的形式存进文件
int b = 0;
char arr2[5] = { 0 };
fscanf(pf, "%s %d", &arr2, &b);//往文件中存储aaaaa和5
printf("%d", b);
fclose(pf);//关闭文件
pf = NULL;//置为空
return 0;
}
int main()
{
FILE* pf = fopen("date.txt", "w+");//打开文件
if (pf == NULL)//判断是否打开成功
{
printf("打开失败");
return 1;
}
int b = 0;
char arr2[5] = { 0 };
fscanf(pf, "%s %d", arr2, &b);//现在b是5arr2是aaaaa
fclose(pf);//关闭文件
pf = NULL;//置为空
return 0;
}
fread和fwrite用法与上面类似,只不过只能以二进制的方式读写。人类没有办法看懂,但是计算机可以看懂。
随机读写其实并不是随机的,而是能从我们想要的位置开始读或写。
我们会用到fseek,ftell,rewind这三个函数。
fseek
int fseek( FILE * stream, long offset, int origin );
第一个参数是文件流,第二个参数是偏移量,第三个参数是起始位置。
即我们会从从起始位置+偏移量位置开始读写函数比如起始位置是1偏移量是3我们就会从4的位置开始读写,偏移量可以位负值。如果成功会返还一个非零值,失败则会返回一个非零的值。
第三个参数我们也可用写成这样SEEK_SET(文件的起始位置即0),SEEK_END(文件的末尾位置),SEEK_CUR(当前读到的位置)。
ftell
该函数可以返回文件指针相对于起始位置的偏移量。
rewind
会让文件指针返回起始位置。
关于本期的文件操作分享就到这里了,如果觉得博主讲的不错的话请给博主一个关注,点赞,收藏,博主还将持续更新知识分享,我们下期再见!