C语言文件操作

其实最让人恐惧的不是年龄的递增,而是随着年龄的增长,你的知识、能力、头脑、眼光、存款都没有随之增长。。。

----  网易云热评

1、写文件

#include <stdio.h>int main() {    int arr[] = {1, 2, 3, 4, 5}, size = 0;    FILE *p_file = fopen("a.bin", "wb");    if (p_file) {        size = fwrite(arr/*内存里第一个存储区的地址*/, sizeof(int)/*单个存储区的大小*/, 5/*希望操作的存储区个数*/, p_file/*文件指针*/);        printf("size是%d\n", size);        fclose(p_file);        p_file = NULL;    }    return 0;}
#include <stdio.h>int main() {    int arr[][5] = {1, 1, 1, 1, 1,                    2, 2, 2, 2, 2,                    3, 3, 3, 3, 3,                    4, 4, 4, 4, 4,                    5, 5, 5, 5, 5};    int size = 0;    FILE *p_file = fopen("b.bin", "wb");    if (p_file) {        size = fwrite(arr, sizeof(int), 25, p_file);        printf("size是%d\n", size);        fclose(p_file);        p_file = NULL;    }    return 0;}

2、读文件

#include <stdio.h>int main() {    int arr[5] = {0}, size = 0, num = 0;    FILE *p_file = fopen("a.bin", "rb");    if (p_file) {        size = fread(arr, sizeof(int), 10, p_file);   //希望从文件里获得10个整数并记录到arr数组里,返回值代表实际得到的数字个数        printf("size是%d\n", size);        for (num = 0;num <= 4;num++) {            printf("%d ", arr[num]);        }        printf("\n");        fclose(p_file);        p_file = NULL;    }    return 0;}
#include <stdio.h>int main() {    int arr[5][5] = {0};    int num = 0, row = 0, col = 0;    FILE *p_file = fopen("b.bin", "rb");    if (p_file) {        //循环变量从最后一组的组下标4        //变到最前一组的组下标0        //每次循环从文件里获得5个整数并        //记录到循环变量做组下标的那一组        //存储区里        for (num = 4;num >= 0;num--) {            fread(arr[num]/*组下标为num这一组里第一个存储区的地址*/, sizeof(int), 5, p_file);        }        for (row = 0;row <= 4;row++) {            for (col = 0;col <= 4;col++) {                printf("%d", arr[row][col]);            }            printf("\n");        }        fclose(p_file);        p_file = NULL;    }    return 0;}

3、文本文件操作

fprintf函数可以把数字记录到文本文件里,这个函数的第一个参数是一个文件指针,后面的参数就是printf函数的参数

fscanf函数可以从文本文件里获得数字并记录,到存储区里,这个函数的第一个参数是一个文件指针,后面的参数就是scanf函数的参数

这两个函数不适合处理数据量大的文件

#include <stdio.h>int main() {    int arr[] = {40, 72, 5, 631, 3871};    int num = 0;    FILE *p_file = fopen("a.txt", "w");    if (p_file) {        for (num = 0;num <= 4;num++) {            //printf("%d ", arr[num]);            fprintf(p_file, "%d ", arr[num]);        }        fclose(p_file);        p_file = NULL;    }    return 0;}#include <stdio.h>int main() {    int val = 0, num = 0;    FILE *p_file = fopen("a.txt", "r");    if (p_file) {        for (num = 1;num <= 5;num++) {            //scanf("%d", &val);            fscanf(p_file, "%d", &val);            printf("%d ", val);        }        printf("\n");        fclose(p_file);        p_file = NULL;    }    return 0;}

4、位置指针操作

如果目标位置在基准位置后距离用非负数表示

如果目标位置在基准位置前距离用负数表示

#include <stdio.h>int main() {    char ch = 0;    FILE *p_file = fopen("abc.txt", "rb");    if (p_file) {        //rewind(p_file);    //把位置指针设置到文件开头        fseek(p_file, 3, SEEK_SET/*把文件头作为基准位置*/);    //把位置指针设置到文件头开始向后3个字节的位置        printf("%ld\n", ftell(p_file)/*获得位置指针的数值*/);        fread(&ch, sizeof(char), 1, p_file);        printf("ch是%c\n", ch);        //rewind(p_file);    //把位置指针设置到文件开头        fseek(p_file, 2, SEEK_CUR/*把当前位置作为基准位置*/);   //把位置指针设置到当前位置向后2个字节的地方        printf("%ld\n", ftell(p_file)/*获得位置指针的数值*/);        fread(&ch, sizeof(char), 1, p_file);        printf("ch是%c\n", ch);        //rewind(p_file);    //把位置指针设置到文件开头        fseek(p_file, -3, SEEK_END/*把文件尾作为基准位置*/);   //把位置指针设置到文件尾向前3个字节的位置        printf("%ld\n", ftell(p_file)/*获得位置指针的数值*/);        fread(&ch, sizeof(char), 1, p_file);        printf("ch是%c\n", ch);        fclose(p_file);        p_file = NULL;    }    return 0;}

5、复制文件

#include <stdio.h>int main(int argc, char **argv) {    int size = 0;    char buf[100] = {0};   //记录从原始文件里得到的数字    FILE *p_src = NULL/*代表原始文件*/, *p_dest = NULL/*代表目标文件*/;    if (argc < 3) {        //命令里没有包含必要的路径        printf("命令错误\n");        return 0;    }    p_src = fopen(*(argv + 1)/*下标为1的指针指向的字符串,这个字符串的内容就是路径一*/, "rb");   //打开原始文件    if (!p_src) {        //处理原始文件打开失败的情况        printf("原始文件打开失败\n");        return 0;    }    p_dest = fopen(*(argv + 2)/*下标为2的指针指向的字符串,这个字符串的内容就是路径二*/, "wb");    //打开目标文件    if (!p_dest) {        //处理目标文件打开失败的情况        printf("目标文件打开失败\n");        fclose(p_src);   //关闭原始文件        p_src = NULL;        return 0;    }    while (1) {        //每循环一次从原始文件里获得100个字节        //并记录到目标文件里        size = fread(buf, sizeof(char), 100, p_src);   //从原始文件里获得100个字节放到buf数组里,size变量记录实际从原始文件里获得的字节个数        if (!size) {            //处理没有从原始文件里获得数字的情况            break;        }        fwrite(buf, sizeof(char), size, p_dest);  //把buf数组里的数字记录到目标文件里,每次只把从原始文件里获得的数据记录到目标文件里    }    fclose(p_dest);  //关闭目标文件    p_dest = NULL;    fclose(p_src);   //关闭原始文件    p_src = NULL;    return 0;}

 

欢迎关注公众号:顺便编点程

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web安全工具库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值