美文网首页c/c++
C基础—文件操作

C基础—文件操作

作者: Peakmain | 来源:发表于2018-09-15 09:24 被阅读1次

    读取文本文件

    void main(){
        // 打开文件 (文件名,模式)mode r(读) w(写) rb(作为二进制读) wb(作为二进制写)
        // FILE *fopen( const char *filename, const char *mode );
    
        char *file_name = "C:\\Users\\Administrator\\Desktop\\test.txt";
        FILE * file=fopen(file_name, "r");
        if (!file){
            printf("文件打开失败");
            exit(0);// 退出程序
        }
        char buffer[10];
        //缓冲区buffer,长度10,文件指针
        while (fgets(buffer, 10, file)){
            printf("%s", buffer);
        };
        //关闭文件
        fclose(file);
        getchar();
    }
    

    文件的写入

    void main(){
        char* fileName = "C:\\Users\\Administrator\\Desktop\\test.txt";
        FILE *file = fopen(fileName, "w");
        if (!file){
            printf("文件打开失败");
            exit(0);// 退出程序
        }
        //会把原来的覆盖掉
        fputs("我是威廉", file);
        // 关闭文件
        fclose(file);
        getchar();
    }
    

    文件的拷贝

    //文件的拷贝,当做二进制文件操作
    
    void main(){
        char *file_name = "C:\\Users\\Administrator\\Desktop\\image.jpg";
        char *fileCopyName = "C:\\Users\\Administrator\\Desktop\\image_copy.jpg";
        FILE * file = fopen(file_name, "rb");
        FILE * file_copy = fopen(fileCopyName, "wb");
        if (!file||!file_copy){
            printf("文件打开失败");
            exit(0);// 退出程序
        }
        // size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
        int buffer[512];
        int len;
        printf("%d", sizeof buffer);
        while ((len=fread(buffer, sizeof(int), 512, file))!=0){
            fwrite(buffer, sizeof(int), len, file_copy);
        }
        fclose(file);
        fclose(file_copy);
        getchar();
    }
    

    获取文件的大小

    //获取文件的大小
    void main(){
        char *file_name = "C:\\Users\\Administrator\\Desktop\\image.jpg";
        FILE * file = fopen(file_name, "rb");
        if (!file){
            printf("文件打开失败");
            exit(0);// 退出程序
        }
        //没有一个函数是可以直接拿文件的大小
        //将文件的指针移动到最后,然后再计算偏移量
        // 三个参数  SEEK_SET(开头), SEEK_CUR(当前), SEEK_END(移动到最后)
        fseek(file, 0, SEEK_END);
        // 计算偏移的位置,ftell 从 0 开始统计到当前(SEEK_END)
        long file_size = ftell(file);
        printf("文件大小:%ld", file_size);
        fclose(file);//953925
        getchar();
    }
    

    文件加密

    //文件加密
    //图片服务器(使用第三方的),为防止图片泄密,图片进行加密
    void main(){
    
        char *file_name = "C:\\Users\\Administrator\\Desktop\\image.jpg";
        char *fileEncrpyName = "C:\\Users\\Administrator\\Desktop\\image_en.jpg";
        FILE * file = fopen(file_name, "rb");
        FILE * file_encrpy = fopen(fileEncrpyName, "wb");
        if (!file || !file_encrpy){
            printf("文件打开失败");
            exit(0);// 退出程序
        }
        //思路:把每一个字节都拿出来,对每一个字节都处理或者把某部分字节拿出来,进行处理
        // 10^5 异或  加密过程 
        //  1010     10
        // ^0101      5
        //  1111  加密 
    
        // 解密 同样的去异或 5 
        //  1111     
        // ^0101      5
        //  1010    解密后 10
        int c;
        while ((c = fgetc(file)) != EOF){
            fputc(c ^ 5, file_encrpy);
        }
        getchar();
    
    }
    

    文件解密

    void main(){
        char *fileEnName = "C:\\Users\\Administrator\\Desktop\\image_en.jpg";
        char *fileDeName = "C:\\Users\\Administrator\\Desktop\\image_dn.jpg";
        FILE * file = fopen(fileEnName, "rb");
        FILE * file_decrpy = fopen(fileDeName, "wb");
        if (!file || !file_decrpy){
            printf("文件打开失败");
            exit(0);// 退出程序
        }
        //思路:把每一个字节都拿出来,对每一个字节都处理或者把某部分字节拿出来,进行处理
        // 10^5 异或  加密过程 
        //  1010     10
        // ^0101      5
        //  1111  加密 
    
        // 解密 同样的去异或 5 
        //  1111     
        // ^0101      5
        //  1010    解密后 10
        int c;
        while ((c = fgetc(file)) != EOF){
            fputc(c ^ 5, file_decrpy);
        }
        getchar();
    }
    

    字符串密码进行加密

    void main(){
        char *file_name = "C:\\Users\\Administrator\\Desktop\\image.jpg";
        char *fileEncrpyName = "C:\\Users\\Administrator\\Desktop\\image_en.jpg";
        FILE * file = fopen(file_name, "rb");
        FILE * file_decrpy = fopen(fileEncrpyName, "wb");
        if (!file || !file_decrpy){
            printf("文件打开失败");
            exit(0);// 退出程序
        }
        //思路:把每一个字节都拿出来,对每一个字节都处理或者把某部分字节拿出来,进行处理
        // 10^5 异或  加密过程 
        //  1010     10
        // ^0101      5
        //  1111  加密 
    
        // 解密 同样的去异或 5 
        //  1111     
        // ^0101      5
        //  1010    解密后 10
        int c;
        char* password = "123456";//轮流进行异或操作
        int index=0;
        int pass_len = strlen(password);
        while ((c = fgetc(file)) != EOF){
            fputc(c ^password[index%pass_len], file_decrpy);
            index++;
        }
        getchar();
    }
    

    对字符串密码进行解密

    //对字符串密码进行解密
    void main(){
        char *file_name = "C:\\Users\\Administrator\\Desktop\\image_en.jpg";
        char *fileEncrpyName = "C:\\Users\\Administrator\\Desktop\\image_dn.jpg";
        FILE * file = fopen(file_name, "rb");
        FILE * file_decrpy = fopen(fileEncrpyName, "wb");
        if (!file || !file_decrpy){
            printf("文件打开失败");
            exit(0);// 退出程序
        }
        //思路:把每一个字节都拿出来,对每一个字节都处理或者把某部分字节拿出来,进行处理
        // 10^5 异或  加密过程 
        //  1010     10
        // ^0101      5
        //  1111  加密 
    
        // 解密 同样的去异或 5 
        //  1111     
        // ^0101      5
        //  1010    解密后 10
        int c;
        char* password = "123456";//轮流进行异或操作
        int index = 0;
        int pass_len = strlen(password);
        while ((c = fgetc(file)) != EOF){
            fputc(c ^password[index%pass_len], file_decrpy);
            index++;
        }
        getchar();
    }
    

    文件的切割

    int getFileSize(char* fileName){
        FILE * file = fopen(fileName, "rb");
        if (!file){
            exit(0);// 退出程序
        }
        //没有一个函数是可以直接拿文件的大小
        //将文件的指针移动到最后,然后再计算偏移量
        // 三个参数  SEEK_SET(开头), SEEK_CUR(当前), SEEK_END(移动到最后)
        fseek(file, 0, SEEK_END);
        // 计算偏移的位置,ftell 从 0 开始统计到当前(SEEK_END)
        long file_size = ftell(file);
        printf("文件大小:%ld", file_size);
        fclose(file);//953925
        return file_size;
    }
    // 文件的切割,思路类似于断点下载
    void main(){
        char *fileName = "C:\\Users\\Administrator\\Desktop\\image.jpg";
        FILE* file = fopen(fileName, "rb");
        //获取文件的大小
        int file_size = getFileSize(fileName);
        // 定义 切多少,计算大小,指定文件名
        int file_number = 3;
        // 二维数组,char[]== char*
        // image_0.jpg
        // image_1.jpg
        // image_2.jpg
        // 一位数组:char* file_name
        // char* 
        char **file_names = (char**)malloc(sizeof(char*)*file_number);
        //每一段的大小
        int preFileSize = file_size / file_number;
        //进行复制
        int i = 0;
        for (; i < 3; i++){
            file_names[i] = (char*)malloc(sizeof(char)* 100);// '\0'
            sprintf(file_names[i], "C:\\Users\\Administrator\\Desktop\\image_%d.jpg", i);
            printf("%s\n", file_names[i]);
        }
        i = 0;
        for (; i < file_number; i++){
            // 从源文件中往切割文件写入数据
            FILE* cur_file = fopen(file_names[i], "wb");
                //写多少
            int start = i*preFileSize;
            int end = (i + 1)*preFileSize;
            for (int j = start; j < end; j++){
                fputc(fgetc(file), cur_file);
            }
            fclose(cur_file);
            free(file_names[i]);
        }
        fclose(file);
        free(file_names);
        getchar();
    }
    

    文件的合并

    int getFileSize(char* fileName){
        FILE * file = fopen(fileName, "rb");
        if (!file){
            exit(0);// 退出程序
        }
        //没有一个函数是可以直接拿文件的大小
        //将文件的指针移动到最后,然后再计算偏移量
        // 三个参数  SEEK_SET(开头), SEEK_CUR(当前), SEEK_END(移动到最后)
        fseek(file, 0, SEEK_END);
        // 计算偏移的位置,ftell 从 0 开始统计到当前(SEEK_END)
        long file_size = ftell(file);
        printf("文件大小:%ld", file_size);
        fclose(file);//953925
        return file_size;
    }
    void main(){
        char *fileName0 = "C:\\Users\\Administrator\\Desktop\\image_0.jpg";
        char *fileName1 = "C:\\Users\\Administrator\\Desktop\\image_1.jpg";
        char *fileName2 = "C:\\Users\\Administrator\\Desktop\\image_2.jpg";
        char *fileName = "C:\\Users\\Administrator\\Desktop\\image_bc.jpg";
        FILE* file0 = fopen(fileName0, "rb");
        FILE* file1 = fopen(fileName1, "rb");
        FILE* file2 = fopen(fileName2, "rb");
        FILE* file = fopen(fileName, "wb");
        //获取文件的大小
        int file_size0 = getFileSize(fileName0);//317975
        int file_size1 = getFileSize(fileName1);
        int file_size2 = getFileSize(fileName2);
        // 定义 切多少,计算大小,指定文件名
        //进行复制
    
        int i = 0;
        for (int start = 0; i < file_size0; i++){
            fputc(fgetc(file0), file);
        }
        for (int j = file_size0; j < file_size0 + file_size1; j++){
            fputc(fgetc(file1), file);
        }
        for (int z = file_size0 + file_size1; z < file_size0 + file_size1 + file_size2; z++){
            fputc(fgetc(file2), file);
        }
        getchar();
    }
    

    相关文章

      网友评论

        本文标题:C基础—文件操作

        本文链接:https://www.haomeiwen.com/subject/savngftx.html