文件——随机读写

文件位置标记及其定位

顺序读写文件时,每读写一个数据后,文件位置标记顺序向后移一个位置,然后在下一次执行读写操作时把数据写入指针所指的位置。
直到把全部数据读写完,此时文件位置标记在最后一个数据之后。

如若需要人为移动文件标记的位置来读写操作,可使用以下函数:

rewind(文件类型指针)

    rewind()函数使文件位置标记指向文件开头; 
    rewind(fp_read);

fseek(文件类型指针,位移量,起始点)

    fseek()函数改变文件位置标记 

    起始点含义: 
        起始点         名字      用数字标记 
        文件开始位置  SEEK_SET    0
        文件当前位置  SEEK_CUR    1 
        文件末尾位置  SEEK_END    2 
    位移量:
        位移量指以起始点为基点,向前移动的字节数。
        位移量应是long型数据(L) 
eg:
    fseek(fp,100L,0);   //将文件位置标记向前移到离文件开头100个字节处 
    fseek(fp,50L,1);    //将文件位置标记前移到离当前位置50个字节处 
    fseek(fp,-10L,2);   //将文件位置标记从文件末尾处向后退10个字节          

实例

随机读写数据文件data_stu.dat;将文件中的第1、3、5、7、9个学生数据输出在屏幕上,并保存到新文件data_stu_singular.dat。

/*
    Name: random_fr_fw
    Author: Liweidong
    Date: 13/07/18 17:14
    Description: 随机读写数据文件  
        将文件中的第1、3、5、7、9个学生数据输出在屏幕上,并保存到新文件 data_stu_singular.dat
*/

#include 
#include 
#define SIZE 10

struct student{
    char name[20];
    int num;
    int age;
    char addr[20];
}stu[SIZE];

void main() {
    FILE *fp_read,*fp_write;
    int i;

    if( !(fp_write = fopen("data_stu_singular","wb"))) {
        printf("cannot open the file data_stu_singular!\n");
        return;
    }   
    if( !(fp_read = fopen("data_stu.dat","rb"))) {
        printf("cannot open the file data_stu.dat.txt!\n");
        return;
    }
    
    printf("name\tnum\tage\taddr\n");
    for(i=0; i

运行结果

文件——随机读写_第1张图片
运行结果

成功读取数据。

传送门

文件:字符形式输入输出
文件:字符串输入输出
文件:二进制 块读写

你可能感兴趣的:(文件——随机读写)