当前位置: 首页 > article >正文

C语言文件读写,文件相关操作

文章目录

  • C语言文件读写,文件相关操作
    • 1.C语言万物皆是地址,文件读操作
    • 2.文件的写
    • 3.文件的复制
    • 4.获取文件的大小
    • 5.文件的加密解密

C语言文件读写,文件相关操作

1.C语言万物皆是地址,文件读操作

//
// Created by MagicBook on 2023-10-22.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>


int main() {
    //文件路径,r,w,rb,rw
    //返回值结构体
    char *fileName = "C:\\Users\\MagicBook\\Desktop\\tv.txt";
    //读的权限,文件必须存在
    FILE *file = fopen(fileName, "r");
    if (!file) {
        //退出程序
        exit(0);
    }
    //定义缓存
    char buffer[10];
    //
    while (fgets(buffer, 10, file)) {

    }
    fclose(file);
    return 0;
}

2.文件的写

//
// Created by MagicBook on 2023-10-22.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>


int main() {
    //文件路径,r,w,rb,rw
    //返回值结构体
    char *fileName = "C:\\Users\\MagicBook\\Desktop\\tvv.txt";
    //写的权限,会自动生成文件
    FILE *file = fopen(fileName, "w");
    if (!file) {
        //退出程序
        exit(0);
    }
    fputs("sdsadds", file);
    fclose(file);
    return 0;
}

3.文件的复制

//
// Created by MagicBook on 2023-10-22.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

//二进制文件来操作rb,rw,
int main() {
    //文件路径,r,w,rb,rw
    //返回值结构体
    char *fileName = "C:\\Users\\MagicBook\\Desktop\\tv.txt";
    //目标
    char *fileNameCopy = "C:\\Users\\MagicBook\\Desktop\\tvv.txt";
    //读取二进制数据
    FILE *file1 = fopen(fileName, "rb");
    //写入二进制数据
    FILE *file2 = fopen(fileName, "rw");

    if (!file1 || !file2) {
        exit(0);
    }
    //412 * 4
    int buffer[512];
    //每次接收的长度
    int len;
    //容器buffer,每次偏移多少,容器大小,
    while ((len = fread(buffer, sizeof(int), sizeof(buffer) / sizeof(int), file1) != 0)) {
        fwrite(buffer, sizeof(int), len, fileNameCopy);
    }
    fclose(file1);
    fclose(file2);
    return 0;
}

4.获取文件的大小

//
// Created by MagicBook on 2023-10-22.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

//二进制文件来操作rb,rw,
int main() {
    //读取头指针,指针移动,移动到末尾,求得文件的大小


    //文件路径,r,w,rb,rw
    //返回值结构体
    char *fileName = "C:\\Users\\MagicBook\\Desktop\\tv.txt";

    //读取二进制数据
    FILE *file1 = fopen(fileName, "rb");
    //写入二进制数据
    FILE *file2 = fopen(fileName, "rw");

    if (!file1 || !file2) {
        exit(0);
    }
    //移动指针
    fseek(file1, 0, SEEK_END);
    //读取信息,字节大小
    long size = ftell(file1);
    

    fclose(file1);
    fclose(file2);
    return 0;
}

5.文件的加密解密

加密

//
// Created by MagicBook on 2023-10-22.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

//二进制文件来操作rb,rw,
int main() {
    //读取头指针,指针移动,移动到末尾,求得文件的大小


    //文件路径,r,w,rb,rw
    //返回值结构体
    char *fileName = "C:\\Users\\MagicBook\\Desktop\\test.png";
    //加密
    char *fileNameEncode = "C:\\Users\\MagicBook\\Desktop\\test_encode.png";


    //读取二进制数据
    FILE *file1 = fopen(fileName, "rb");
    //写入二进制数据
    FILE *file2 = fopen(fileNameEncode, "rw");

    if (!file1 || !file2) {
        exit(0);
    }
    //加密:破坏二进制文件
    //解密:还原文件
    //接收读取的值
    int c;
    //返回值EOF
    while ((c == fgetc(file1) != EOF)) {
        fputc(c^5,file2);
    }
    fclose(file1);
    fclose(file2);
    return 0;
}

解密

//
// Created by MagicBook on 2023-10-22.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

//二进制文件来操作rb,rw,
int main() {
    //读取头指针,指针移动,移动到末尾,求得文件的大小


    //文件路径,r,w,rb,rw
    //返回值结构体
    char *fileName = "C:\\Users\\MagicBook\\Desktop\\test.png";
    //加密
    char *fileNameEncode = "C:\\Users\\MagicBook\\Desktop\\test_encode.png";

    //密钥
    char *password = "123456";

    //读取二进制数据
    FILE *file1 = fopen(fileName, "rb");
    //写入二进制数据
    FILE *file2 = fopen(fileNameEncode, "rw");

    if (!file1 || !file2) {
        exit(0);
    }
    //加密:破坏二进制文件
    //解密:还原文件
    //接收读取的值
    int c;
    int index = 0;
    int len = strlen(password);
    //返回值EOF
    while ((c == fgetc(file1)) != EOF) {
        char item = password[index % len];
        fputc(c ^ item, file2);
        index++;
    }
    fclose(file1);
    fclose(file2);
    return 0;
}


http://www.kler.cn/a/106033.html

相关文章:

  • OpenCV:二值化与自适应阈值
  • 快速分析LabVIEW主要特征进行判断
  • Java中的泛型
  • 17 一个高并发的系统架构如何设计
  • HTML特殊符号的使用示例
  • SpringBoot 中的测试jar包knife4j(实现效果非常简单)
  • 【TES641】基于VU13P FPGA的4路FMC接口基带信号处理平台
  • AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(六):一个AWTK工程
  • Go学习第十一章——协程goroutine与管道channel
  • Windows server服务器允许多用户远程的设置
  • sourcetree Incorrect username or password (access token)
  • 小型气象站数据采集网关准确监测雨量和风速
  • python一点通: python 3.10中引进的管道操作符 | 有什么妙用?
  • 浅谈信息化与数字化
  • 小型洗衣机哪个牌子质量好?家用小洗衣机推荐
  • esp32-S3 + visual studio code 开发环境搭建
  • 【spark客户端】Spark SQL CLI详解:怎么执行sql文件、注释怎么写,支持的文件路径协议、交互式模式使用细节
  • 使用js的forEach时,如果想退出循环
  • app测试和web测试有什么区别
  • redis学习(三)——java整合redis
  • Ubuntu22.04 搭建 OpenHarmony 命令行开发环境
  • 记一次 .Net+SqlSugar 查询超时的问题排查过程
  • Android帧率监测与优化技巧
  • 【LeetCode】102. 二叉树的层序遍历
  • 51.MongoDB聚合操作与索引使用详解
  • 为什么选择Codigger静态分析?