C语言基础知识--文件的顺序读写与随机读写

复制代码
// fwirte 和 fread

// #include <stdio.h>
// #include <string.h>

// fread (void *ptr, size_t size, size_t nmemb, FILE *stream); //二进制读
// fwrite (const void *ptr, size_t size, size_t nmemb, FILE *stream); //二进制写 ,写数据块到文件流
// struct  Person {
//     char name[20];
//     int age;
//     float score;
// };
// int main  () {
//     // 打开文件
//    // struct Person p = {"张三", 18, 90.5};
//    // FILE *fp = fopen ( "test.txt" , "wb" );
//    struct Person p = {0};
//     FILE *fp = fopen ( "test.txt" , "rb" );
//     // 判断文件是否打开成功
//     if ( fp == NULL ) {
//         perror("fopen");
//         return -1;
//     }
//     // 写数据块到文件流
//     // fwrite ( &p , sizeof(struct Person) , 1 , fp );
//     // 读取成功后,返回实际读到的个数
//     fread(&p, sizeof(struct Person), 1, fp);  // 读取数据块 从文件里读1个大小为 Person 的数据块 放到 p 中
//     // 输出数据
//     printf ("%s %d %.2f\n", p.name, p.age, p.score);
//     // 关闭文件
//     fclose ( fp );
//     fp = NULL;
//     return 0;
//
// }


// 文件的随机读写
// fseek: 文件指针的偏移
// fseek ( FILE *stream , long offset , int whence );
// offset :偏移的字节数 可以正负
// whence 0:从文件开头开始偏移 1:从当前位置开始偏移 2:从文件末尾开始偏移 offset:偏移的字节数 可以正负
// ftell : 输出文件指针相较于起始位置的偏移量
// ftell(fp)
// rewind : 将文件指针重新定位到文件起始位置
// rewind(fp)

// struct Person {
//     char name[32];
//     int age;
//     float height;
// };
// int main () {
//     FILE *fp = fopen("test56.txt" , "r");
//     if ( fp == NULL ) {
//         return -1;
//     }
//     int ch = 0;
//     // SEEk_CUR:从当前位置开始偏移
//     // SEEK_END:从文件末尾开始偏移
//     // SEEK_SET:从文件开头开始偏移
////     fseek(fp , 2 , SEEK_SET);
//     fseek(fp , -2 , SEEK_END);
//     ch = fgetc(fp);
//     printf ("%c\n", ch);
//     // 输出文件指针相较于起始位置的偏移量
//     printf ("%ld\n", ftell(fp));
//     // 让文件指针回到起始位置
//     rewind(fp);
//     ch = fgetc(fp);
//     printf ("%c\n", ch);
//     // 关闭文件
//     fclose(fp);
//     fp = NULL;
//     return 0;
// }


// 文件结束的判定
// 1、 被错误使用的 feof函数 ,是用于判断文件指针是否已经到达文件末尾。
// 2、 读取文件结束的原因: 1、文件结束符 EOF ,2、遇到错误
// 3、 文本文件的结束: fgetc 函数返回 EOF ,fgets 函数返回 NULL
// 4、 二进制文件的结束: fread 函数返回 值是否小于实际要读的个数
// 5、 文件结束的判定: feof 函数(检查文件是否结束),ferror 函数: 检测文件是否结束,返回错误状态值

//enum {
//    size = 10
//};
//int main(){
//    double s[size] ={1,2,3,4,5,6,7,8,9,10}
//    FILE *fp1 = fopen("test1.txt" , "r");
//
//}

// 拷贝 test1 文件的数据到 test2 文件中
//int main(){
//    // 打开文件
//    FILE *fpread = fopen("test1.txt" , "r");
//    if ( fpread == NULL ) {
//        perror("fopen");
//        return -1;
//    }
//    FILE *fpwrite = fopen("test2.txt" , "w");
//    if ( fpwrite == NULL ) {
//        perror("fopen");
//        fclose(fpread);
//        return -1;
//    }
//    // 读写文件
//    int ch = 0;
//    while ( (ch = fgetc(fpread)) != EOF ) // 不等于eof 则代表正常
//    {
//        fputc(ch , fpwrite);
//    }
//    // 关闭文件
//    fclose (fpread);
//    fpread = NULL;
//    fclose (fpwrite);
//    fpwrite = NULL;
//    return 0;
//}

// 文件缓冲区 :所谓缓冲区,就是把数据先暂存到一个缓冲区中,然后再一次性写入文件。
// 所谓缓冲区是指系统自动地在内存中为程序每一个正在使用的文件开辟一块缓冲区,从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后,再把缓冲区中的数据写入磁盘。
// 关闭文件也会刷新缓冲区
// 如果不刷新缓冲区,数据可能会丢失。

// 编译和链接
// 翻译环境和运行环境
// 翻译环境: 编译和链接 生成可执行文件程序 .exe  文件
// 编译: 预处理 、编译、汇编、 链接
// 运行环境:  运行程序
// 源文件经过编译器 编译处理生成 .obj 目标文件 ,通过链接库工作生成链接文件 .exe
// 链接库是指运行时环境所依赖的库文件
// 多个目标文件和链接库一起经过链接生成可执行文件
// 编译器的三个执行过程:.c/.h 预处理生成.i的文件、编译 .s 文件、汇编 生成 .obj 文件 链接生成可执行文件
//extern int ADD(int a,int b);
//int main(){
//    int a = 10;
//    int b = 20;
//    int c =ADD(a,b);
//    printf("c = %d\n",c);
//    return 0;
//}
相关推荐
寂静山林3 分钟前
UVa 12991 Game Rooms
算法·1024程序员节
仟千意13 分钟前
数据结构:排序篇
数据结构
余俊晖1 小时前
RLVR训练多模态文档解析模型-olmOCR 2技术方案(模型、数据和代码均开源)
人工智能·算法·ocr·grpo
eguid_11 小时前
【开源项目分享】JNSM1.2.0,支持批量管理的jar包安装成Windows服务可视化工具,基于Java实现的支持批量管理已经安装服务的可视化工具
java·开源·jar·1024程序员节·windows服务·jar包安装成服务·exe安装成服务
凉虾皮1 小时前
2024包河初中组
学习·算法·1024程序员节
脚踏实地的大梦想家1 小时前
【Go】P8 Go 语言核心数据结构:深入解析切片 (Slice)
开发语言·数据结构·golang
杯莫停丶1 小时前
设计模式之:享元模式
java·设计模式·享元模式
遥远_2 小时前
Java微服务无损发布生产案例
java·spring·微服务·优雅停机·java微服务无损发布
苹果醋32 小时前
学习札记-Java8系列-1-Java8新特性简介&为什么要学习Java8
java·运维·spring boot·mysql·nginx
武子康2 小时前
Java-159 MongoDB 副本集容器化 10 分钟速查卡|keyfile + –auth + 幂等 init 附 docker-compose
java·数据库·mongodb·docker·性能优化·nosql·1024程序员节