美文网首页
随机读写文件

随机读写文件

作者: lxr_ | 来源:发表于2021-10-31 10:21 被阅读0次
#include <stdio.h>
#include <stdlib.h>

struct Student      //定义Student结构体
{
    char name[24];
    int id;
}stu[3],sb;          //定义结构体数组stu和结构体变量sb
int main(int argc, char** argv)
{
    FILE* fp;
    if ((fp = fopen("hello.txt", "w")) == NULL)//打开文件时,文件指示器在文件开始:即0位置处
    {
        printf("文件打开失败\n");
        exit(EXIT_FAILURE);
    }

    printf("%ld\n", ftell(fp));  //0    使用ftell函数获取当前文件指示器的位置,返回类型为long

    fputc('h', fp);              //向文件写入一个字符
    printf("%ld\n", ftell(fp));  //1
    fputs("ello\n", fp);         //向文件写入一个字符串
    printf("%ld\n", ftell(fp));  //7    因为写入了hello\n,而Windows的换行会被自动转换为\r\n,所以文件中一共为7个字节,在linux下运行结果为6

    rewind(fp);                  //文件指示器移至文件开始处,即0位置处
    fputs("world", fp);          //文件内容变为world,将原来的内容覆盖,相当于从头开始重新写入如果写入字符个数的少于原来文件中的,则多于的部分仍然存在

    fclose(fp);                  //关闭文件

    //int fseek(FILE* stream,long int offset,int whence);用于设置文件流的位置指示器
    //offset指定从whence参数的位置起偏移多少个字节,whence指定开始偏移的位置,可以为SEEK_SET(文件头),SEEK_CUR(当前读写位置),SEEK_END(文件末尾)
    //指定为SEEK_END时,offset通常为负值,如offset为-1时,表示文件最后一个位置
    //函数调用成功返回0,否则返回非0值

    //*********实验:向文件写入多个student信息,并查询某个学生信息********
    //**********写入信息************
    if ((fp = fopen("student.txt", "w")) == NULL)  //也可使用wb模式打开文件
    {
        printf("打开文件失败\n");
        exit(EXIT_FAILURE);
    }

    printf("请开始录入学生信息(格式:姓名 学号 )\n");
    for (int i = 0; i < 3; i++)
    {
        scanf("%s %d", stu[i].name, &stu[i].id);   //按照格式录入信息
    }
    fwrite(stu, sizeof(struct Student), 3, fp);    //以二进制格式写入信息
    fclose(fp);
    //**********读取**********
    if ((fp = fopen("student.txt", "r")) == NULL)  //也可使用rb模式打开文件
    {
        printf("打开文件失败\n");
        exit(EXIT_FAILURE);
    }
    fseek(fp, sizeof(struct Student), SEEK_SET);  //文件指示器从文件头开始偏移sizeof(struct Student)个字节,相当于文件指示器移动到第一个学生信息后面
    fread(&sb, sizeof(struct Student), 1, fp);    //此时的读取一个sizeof(struct Student)大小,则读取的为第二个学生的信息存入sb中
    printf("%s-%d\n", sb.name, sb.id);            //打印读取的第二个学生的信息

    system("pause");
    return 0;
}

//******** 注意:可移植性问题 ************
//换行符不一样的问题,linux下为"\n",windows下为"\r\n"
//对于以二进制模式打开的文件,fseek函数在某些操作系统可能不支持SEEK_END位置
//对于以文本模式打开的文件,fseek函数的whence参数只能取SEEK_SET才是有意义的,并且传递给offset参数的值要么是0,要么是上一次对同一个文件调用ftell函数获得的返回值

相关文章

  • 文件——随机读写

    文件位置标记及其定位 顺序读写文件时,每读写一个数据后,文件位置标记顺序向后移一个位置,然后在下一次执行读写操作时...

  • 随机读写文件

    //******** 注意:可移植性问题 ************//换行符不一样的问题,linux下为"\n",...

  • 读写文件1

    //读写分为顺序读写(从文件开始读写)和随机读写(比如定位文件指示器后读取第1000个字节位置的字符) //***...

  • IO

    1, RandomAccessFileread/write/seek都是native实现,随机读写文件。2, St...

  • 磁盘存储性能测试

    测试方案 两个维度随机读写频繁的应用,如小文件存储(图片)、OLTP数据库、邮件服务器,关注随机读写性能,IOPS...

  • python文件的随机读写

    在读写文件的过程中,如果想知道当前的位置,可以使用tell()来获取 例: #打开一个已经存在的文件 f=open...

  • 容易弄混的python与matlab语句

    读取目录下文件名 格式转换 字符串 读写文件 图片 opencv + matplotlib 打乱list 随机数 ...

  • ★15.I-O系统

    File 相关类 RandomAccessFile:独立的随机访问文件读写类。 示例:列出文件夹中的目录 Inpu...

  • 2021-09-21 IO流(RandomAccessFile)

    RandomAccessFile 1.随机访问文件,自身具备读写方法2.通过skipBytes(int x),se...

  • RocketMQ和Kafka对比

    1、扩展性上 Kafka的吞吐量最高,RocketMQ所有的消息均是顺序写文件(磁盘顺序读写速度超过内存随机读写)...

网友评论

      本文标题:随机读写文件

      本文链接:https://www.haomeiwen.com/subject/szxnaltx.html