因为是以函数的形式完成整个知识点的梳理,可以直接看程序源码进行直接学习哦!!!
欢迎大家参与讨论、纠错~
一、文件的随机读写
(一)知识点引入
前面介绍的对文件的读写方式都是顺序读写,即读写文件只能从头开始,顺序读写各个数据
在实际问题中:要求只读写文件中某一指定的部分,例如:读取文件第200字节处的30个字节
解决方法:可以移动文件内部的位置指针到需要读写的位置再进行读写(随机读写)
实现随机读写的关键:按要求移动位置指针(文件的定位)
完成文件定位的函数有:rewind、ftell、fseek函数
void test16()
{
char buf[128] = "";
FILE* fp = NULL;
fp = fopen("test16.txt", "w+");
if (fp == NULL)
{
perror("fopen");
return;
}
// 先往文件中写入一个字符串"hello file"
fputs("hello file", fp);
fclose(fp);
// 打开一个文件进行操作后需要关闭再重新打开文件让文件的流指针回到文件首部
fp = fopen("test16.txt","r");
// 在从文件找那个读取该字符串
fgets(buf, sizeof(buf), fp);
printf("buf = %s\n", buf);
fclose(fp);
}
不能刚写入就读出,因为这时候系统还不知道你到底要写入多少字节的内容,所以系统会自己预留出一部分的空间,这部分的空间里存储的内容未知(乱码)。在这个时候进行的读操作其实是从文件写入结束的位置开始读取,也就是对那部分未知空间进行读取,得到的内容并不是自己想要的(这里很重要哦!!!)
-
解决上述文件问题: