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 小时前
Java中的CAS机制详解
java·开发语言
-dzk-4 小时前
【代码随想录】LC 59.螺旋矩阵 II
c++·线性代数·算法·矩阵·模拟
风筝在晴天搁浅4 小时前
hot100 78.子集
java·算法
Jasmine_llq4 小时前
《P4587 [FJOI2016] 神秘数》
算法·倍增思想·稀疏表(st 表)·前缀和数组(解决静态区间和查询·st表核心实现高效预处理和查询·预处理优化(提前计算所需信息·快速io提升大规模数据读写效率
超级大只老咪5 小时前
快速进制转换
笔记·算法
m0_706653235 小时前
C++编译期数组操作
开发语言·c++·算法
故事和你915 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
qq_423233905 小时前
C++与Python混合编程实战
开发语言·c++·算法
TracyCoder1236 小时前
LeetCode Hot100(19/100)——206. 反转链表
算法·leetcode
m0_715575346 小时前
分布式任务调度系统
开发语言·c++·算法