C语言涉猎笔记(三)

文件读取

//文件的读
#include <stdio.h>
#include <stdlib.h> // 文件的操作需要用这个包

int main() {
    //定义一个文件路径的字符串
    char * file_path = "D:\\123.txt";
    //fopen函数打开文件,参数一是文件的路径,参数二是操作文件的模式(r:读,w:写,rb:作为二进制文件读, rw:作为二进制文件写)
    //返回体为FILE的结构体指针
    FILE * file = fopen(file_path, "r");
    //文件读取失败会返回NULL
    if (!file) {
        printf("文件操作失败");
        exit(0); // 退出程序
    }

    //定义读取缓存区,和java一样
    char buffer[10];
    //fgets读取文件, 参数一:读取容器(缓冲区) 参数二:读取长度(缓冲区长度) 参数三:读取文件指针
    while (fgets(buffer, 10, file)) {
        printf("%s", buffer);
    }
    //文件操作完毕关闭文件
    fclose(file);
    return 0;
}

文件写入

//文件的写
#include <stdio.h>
#include <stdlib.h>

int main() {
    char * file_path = "D:\\456.txt";
    //使用写的模式若目录下没有文件会自动生成一个0kb的文件
    FILE * file = fopen(file_path, "w");
    if (!file) {
        printf("文件操作失败");
        exit(0); // 退出程序
    }
    //fputs写入文件,参数一:写入文件的内容  参数二:写入文件的指针
    fputs("123456789", file);
    //关闭文件
    fclose(file);
    return 0;
}

文件的复制

//文件的复制
#include <stdio.h>
#include <stdlib.h>

int main() {
    char * file_path = "D:\\123.txt";
    char * file_copy_path = "D:\\789.txt";
    //使用rb模式读取二进制数据
    FILE * file = fopen(file_path, "rb");
    //使用rw模式写入二进制数据,此操作会重新生成文件,以前的文件会被覆盖
    FILE * fileCopy = fopen(file_copy_path, "wb");
    if (!file && !fileCopy) {
        printf("文件操作失败");
        exit(0);
    }
    //第一种方式:fread 和 fwrite
    //定义缓冲区
    int buffer[512];
    //定义每次读取数据长度;
    int len;
    //fread读取二进制数据,参数一:读取容器(缓冲区) 参数二:每次读取偏移的字节数(int的长度)  参数三:每次读取内容的长度(容器大小)  参数四:被读取文件指针
    //返回读取到的数据长度
    while ((len = fread(buffer, sizeof (int), 512, file)) != 0) {
        //fwrite写入二进制数据,参数一:写入内容  参数二每次写入的偏移的字节数(int的长度)  参数三:每次写入内容的长度(容器大小)  参数四:复制的文件指针
        fwrite(buffer, sizeof (int), len, fileCopy);
    }

    //第二种方式(操作指针移动一个字节,可用于通过字节加解密文件):fgetc 和 fputc
    //接收读取的值
    int c;
    //fgetc,操作文件指针移动一个字节,返回移动时读取的的这一个字节。循环移动到EOF(end for file)时即移动到末尾完毕
    while ((c = fgetc(file)) != EOF) {
        //fputc,当前文件指针位置写入一个字节并操作文件指针移动一个字节。
        fputc(c, fileCopy);
    }

    //关闭文件
    fclose(file);
    fclose(fileCopy);
    return 0;
}

获取文件大小

//文件大小
#include <stdio.h>
#include <stdlib.h>

int main() {
    char * file_path = "D:\\456.txt";

    FILE * file = fopen(file_path, "rb");
    if (!file) {
        printf("文件操作失败");
        exit(0);
    }
    //fseek挪动文件指针 参数一:文件指针  参数二和参数三:挪动至离文件结尾(SEEK_END)0字节处
    fseek(file, 0, SEEK_END);
    //ftell获取文件指针相对于文件首位置的偏移量,此时计算的file_size即为文件的字节数
    long file_size = ftell(file);
    printf("file_size = %ld\n", file_size);
    fclose(file);
    return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值