C语言基础四

文件相关

1、文件的读取

#include 
#include  // 文件的操作,是在这个头文件里面的
#include 
int main() {
    // fopen打开文件的意思(参数1:文件路径 文件源,  参数2:模式 r(读) w(写)  rb(作为二进制文件读) rw(作为二进制文件写)  返回值 FILE 结构体)
    // FILE * fopen (const char *, const char *);
    char * fileNameStr = "D:\\Temp\\DerryFile.txt";
    // 既然是使用了r,你要提前准备好文件
    FILE * file = fopen(fileNameStr, "r");
    if (!file) {
        printf("文件打开失败,请你个货检测:路径为%s路径的文件,看看有什么问题\n", fileNameStr);
        exit(0); // 退出程序
    }
    // 先定义缓存区域 (容器)
    char buffer[10];
    // 1.缓冲区buffer, 2:长度10, 3:文件指针变量
    while (fgets(buffer, 10, file)) {
        printf("%s", buffer);
    }
    // 关闭文件
    fclose(file);
    return 0;
}

2、文件的写入

#include 
#include  // 文件的操作,是在这个头文件里面的
#include 
int main() {
    // fopen打开文件的意思(参数1:文件路径 文件源,  参数2:模式 r(读) w(写)  rb(作为二进制文件读) wb(作为二进制文件写)  返回值 FILE 结构体)
    // FILE * fopen (const char *, const char *);
    char * fileNameStr = "D:\\Temp\\DerryFileW.txt";
    // 既然是使用了w,他会自动生成文件 0kb
    FILE * file = fopen(fileNameStr, "w");
    if (!file) {
        printf("文件打开失败,请你个货检测:路径为%s路径的文件,看看有什么问题\n", fileNameStr);
        exit(0); // 退出程序
    }
    fputs("Derry Success run...", file);
    // 关闭文件
    fclose(file);
    return 0;
}

3、文件的复制

#include 
#include 
#include 

int main() {
    char *fileName = "E:\\enjoy\\FileTest.txt"; //源文件
    char *fileNameCopy = "E:\\enjoy\\FileTestCopy.txt";//目标文件

    //rb读取二进制文件
    FILE *file = fopen(fileName, "rb");
    //wb 写入二进制文件
    FILE *fileCopy = fopen(fileNameCopy, "wb");

    if (!file || !fileCopy) {
        printf("文件路径有问题,请检查");
        exit(0);
    }

    char buffer[512];
    int len; //每次读取的长度
    // fread:参数1:容器buffer, 参数2:每次偏移多少 int, 参数3:容器大小
    while ((len = fread(buffer, sizeof(int), sizeof(buffer) / sizeof(int), file))) {
        fwrite(buffer, sizeof(int), len, fileCopy);
    }

    fclose(file);
    fclose(fileCopy);
    return 0;
}

4、文件的大小获取

#include 
#include  
#include 
int main() {
    // 没有专门的 文件大小获取 API,
    // (思路:)读取头指针 头指针挪动位置,挪动到最后,就可以求得文件大小
    char * fileNameStr = "D:\\Temp\\DerryFile.txt"; // 来源
    // 既然是使用了w,他会自动生成文件 0kb
    FILE * file = fopen(fileNameStr, "rb"); // file == 指针
    if (!file) {
        printf("文件打开失败,请你个货检测:路径为%s路径的文件,看看有什么问题\n", fileNameStr);
        exit(0); // 退出程序
    }
    // 都是操作指针来玩的
    // SEEK_SET(开头)  SEEK_CUR(当前)  SEEK_END(结尾)
    fseek(file, 0, SEEK_END);
    // 走到这里之后:file有了更丰富的值,给你的file指针赋值,挪动的记录信息
    // 读取   刚刚给file赋值的记录信息
    // 其实此函数目的是:计算偏移的位置,ftell 从 0 开始统计到当前(SEEK_END)
    long file_size = ftell(file);
    printf("%s文件的字节大小是:%ld\n", fileNameStr, file_size);
    // 关闭文件
    fclose(file);
    return 0;
}

5、文件的加密解密

//【文件的加密,使用密钥】
#include 
#include 
#include 
int main() {
    char *fileNameStr = "D:\\Temp\\IMG.jpg"; // 来源
    char * fileNameStrEncode = "D:\\Temp\\IMG_encode.jpg"; // 加密后的目标文件

    // 密钥
    char * password = "123456"; // 我现在做的事情:我的密钥 必须生效

    FILE * file = fopen(fileNameStr, "rb"); // r 必须字节提前准备好文件
    FILE * fileEncode = fopen(fileNameStrEncode, "wb"); // w 创建一个0kb的文件

    if (!file || !fileEncode) {
        printf("文件打开失败,请你个货检测:路径为%s路径的文件,看看有什么问题\n", fileNameStr);
        exit(0); // 退出程序
    }
    int c;
    int index = 0;
    int pass_len = strlen(password);
    // fgetc(文件指针)  返回值 EOF = end fo file
    while ((c = fgetc(file)) != EOF) {
        char item = password[index%pass_len];
        // 1 2 3 4 5 6  1 2 3 4 5 6  1 2 3 4 5 6 ...
        printf("item:%c%\n", item);
        fputc(c ^ item, fileEncode);
        index ++;
    }
    // 关闭文件
    fclose(file);
    fclose(fileEncode);
}
// TODO 【文件的解密,使用密钥】
#include 
#include  
#include 
int main() {
    char * fileNameStr = "D:\\Temp\\IMG_encode.jpg"; // 来源
    char * fileNameStrDecode = "D:\\Temp\\IMG_decode.jpg"; // 解密后的目标文件

    FILE * file = fopen(fileNameStr, "rb"); // r 必须字节提前准备好文件
    FILE * fileDecode = fopen(fileNameStrDecode, "wb"); // w 创建一个0kb的文件
    if (!file || !fileDecode) {
        printf("文件打开失败,请你个货检测:路径为%s路径的文件,看看有什么问题\n", fileNameStr);
        exit(0); // 退出程序
    }
    // 密钥
    char * password = "123456"; // 我现在做的事情:我的密钥 必须生效
    int  c;
    int index = 0;
    int pass_len = strlen(password);
    while ((c = fgetc(file)) != EOF) {
        fputc(c ^ password[index%pass_len], fileDecode);
        index++;
    }
    fclose(file);
    fclose(fileDecode);
    return 0;
}

你可能感兴趣的:(C语言基础四)