南京网站开发南京乐识优,专门做网页设计网站,最简单的网站模板,品牌策划怎么写随机读写数据文件
一、随机读写原理
在我们写数据时#xff0c;有一个光标不断的在随着新写入的数据往后移动#xff1b;
而读数据时#xff0c;也有一个看不见光标#xff0c;随着已经读完的数据#xff0c;往后移动 这里的文件读写位置标记——可以想象成图形界面里的…随机读写数据文件
一、随机读写原理
在我们写数据时有一个光标不断的在随着新写入的数据往后移动
而读数据时也有一个看不见光标随着已经读完的数据往后移动 这里的文件读写位置标记——可以想象成图形界面里的光标读写时自动移动
也类似于看电影听音乐时的进度条
而随机读写就是随机跳跃移动光标或是进度滚动条 二、随机读写函数fseek说明fseek的简单应用
//把D盘目录下的1.txt文件D:\\1.txt的内容前提有该文件且有数据读2次并输出到屏幕 可以看到上图第一遍fread的返回值len1为15不是100因为fread的返回值是实际读取的数据数量
而第二个为0并没有读进来这是因为——
例如读下图中的一串数据第一遍顺序读到末尾光标显示在末尾
读完了第二次重新从光标的这个位置再去读
此时光标已经在数据的最末尾了那么再去读已经没有数据了 所以在第二次读len2之前我们要将文件标记位置重新移动到文件开头——fseek fseek有3个参数
1.文件位置指针fr
2.字节距离这个参照点的位置
3.初始化的位置也叫参照点参照物
它提供了3个参照点参照点在哪光标在哪
第一个是文件标记位置光标的当前位置第二个是文件尾第三个是文件头
之后通过第二个参数将光标往左或是往右偏移多少个字节
现在光标就能到达你想达到的位置即随机函数
例如要到达文件开头那就是偏移量为0以文件开头为参照点
fseek(fr,0,SEEK_SET) 要是以第一遍读完后的文件尾为当前位置作参照点
那么往左移为负数往右移为正数
从尾回到头就是-len1 三、读取指定学生信息 //1打开2读3输出4跳过
//再磁盘文件上存有10个学生的数据将第1,3,5,7,9个学生数据输入计算机并在屏幕上显示出来//学生结构体
typedef struct Student
{char name[20];//姓名int num;//学号int age;//年龄char addr[100];//地址
} Student;//1打开2读3输出4跳过
int main()
{FILE* fr fopen(1.txt, rb);if (fr NULL){printf(文件打开失败\n);return -1;}Student stu;//读到stu里面int len;for (int i 0; i 3; i)//读3个学生的信息{lenfread(stu, sizeof(Student), 1, fr);if (len 1)//要信息了求读一次却没有读到1说明文件已经没有{printf(文件结束了\n);break;}printf(%s %d %d %s\n, stu.name, stu.num, stu.age, stu.addr);//跳过偶数位置fseek(fr,sizeof(Student), SEEK_CUR);//跳过一个学生大小的字节数}fclose(fr);return 0;
}