拆分文件和合并文件(C代码)

it2025-03-17  11

拆分文件.c

/* 将文件拆分为3个部分 */ #include <string.h> #include <stdio.h> #include <stdlib.h> void file_r_w_1(FILE * fIN1) { FILE * fOUT; fseek(fIN1,0,SEEK_SET); char *data; data=malloc(16); fread(data, 1, 16, fIN1); printf("%d\n", strlen(data)); // printf("%s\n", data); fOUT = fopen("第1部分.exe", "wb"); fwrite(data, 1, 16, fOUT); free(data); fclose(fOUT); } void file_r_w_2(FILE * fIN2) { FILE * fOUT; fseek(fIN2,16,SEEK_SET); // 通过这边拆出 char *data; data=malloc(32); fread(data, 1, 32, fIN2); printf("%d\n", strlen(data)); // printf("%s\n", data);printf("1\n"); fOUT = fopen("第2部分.exe", "wb"); fwrite(data, 1, 32, fOUT); free(data); fclose(fOUT); } void file_r_w_3(FILE * fIN3) { FILE * fOUT; fseek(fIN3,48,SEEK_SET); char *data; data=malloc(5581076); fread(data, 1, 5581076, fIN3); printf("%d\n", strlen(data)); // printf("%s\n", data); fOUT = fopen("第3部分.exe", "wb"); fwrite(data, 1, 5581076, fOUT); free(data); fclose(fOUT); } int main() // 将文件拆为3个部分 { FILE * fIN; fIN = fopen("测试.exe", "rb"); fseek(fIN,0L,SEEK_END); int file_len = ftell(fIN); fseek(fIN,0,0); printf("文件大小为[%d]\n", file_len); file_r_w_1(fIN); // 第1部分 file_r_w_2(fIN); // 第2部分 file_r_w_3(fIN); // 第3部分 fclose(fIN); return 0; }

合并文件.c

// 合并文件 #include <stdio.h> #define IN int rwFile(IN char * orgnFile1, IN char * orgnFile2, IN char * orgnFile3, IN char * outFile) { FILE *fpIN1; FILE *fpIN2; FILE *fpIN3; FILE *fpIN4; FILE *fpOUT; fpIN1 = fopen(orgnFile1,"rb"); // 打开原始的文件 // 获取文件大小 fseek(fpIN1,0L,SEEK_END); // 这一句是将文件指针fp移动到文件数据的最后一位上 int len1 = ftell(fpIN1); // 获取当前文件指针到文件开头的长度大小 fseek(fpIN1,0,0); // 将文件指针fp移动到文件开头的地方 printf("%d\n", len1); unsigned char in1[len1]; fread(in1,1,len1,fpIN1); // 读取原始文件,将文件内容存到 in 中 fclose(fpIN1); fpIN2 = fopen(orgnFile2,"rb"); // 打开原始的文件 // 获取文件大小 fseek(fpIN2,0L,SEEK_END); // 这一句是将文件指针fp移动到文件数据的最后一位上 int len2 = ftell(fpIN2); // 获取当前文件指针到文件开头的长度大小 fseek(fpIN2,0,0); // 将文件指针fp移动到文件开头的地方 printf("%d\n", len2); unsigned char in2[len2]; fread(in2,1,len2,fpIN2); // 读取原始文件,将文件内容存到 in 中 fclose(fpIN2); fpIN3 = fopen(orgnFile3,"rb"); // 打开原始的文件 // 获取文件大小 fseek(fpIN3,0L,SEEK_END); // 这一句是将文件指针fp移动到文件数据的最后一位上 int len3 = ftell(fpIN3); // 获取当前文件指针到文件开头的长度大小 fseek(fpIN3,0,0); // 将文件指针fp移动到文件开头的地方 printf("%d\n", len3); unsigned char in3[len3]; fread(in3,1,len3,fpIN3); // 读取原始文件,将文件内容存到 in 中 fclose(fpIN3); fpOUT = fopen(outFile,"w+"); // 打开要写入的文件 fwrite(in1,sizeof(in1),1,fpOUT); // 将上面读取的 in 写入到要写入的文件中 fwrite(in2,sizeof(in2),1,fpOUT); fwrite(in3,sizeof(in3),1,fpOUT); fclose(fpOUT); return 0; } int main() { char *origin_file1 = "第1部分.exe"; char *origin_file2 = "第2部分.exe"; char *origin_file3 = "第3部分.exe"; char *out_file = "新的.exe"; rwFile(origin_file1, origin_file2, origin_file3, out_file); return 0; }

对于大文件的合并可以用这个:

// 合并文件 #include <stdio.h> #include<malloc.h> #define IN #define OUT // 获取文件大小 int FileSize(IN char *file) { FILE *fil; fil = fopen(file,"rb"); fseek(fil,0L,SEEK_END); int filesize = ftell(fil); fseek(fil,0,0); return filesize; } // 读取文件 int ReadFileData(IN char *fileName, OUT char *filedata) { FILE *fpIN; int fileSizes = FileSize(fileName); fpIN = fopen(fileName,"rb"); fread(filedata,1,fileSizes,fpIN); fclose(fpIN); } // 写入文件 int WriteToFile(char *filedata, int size, OUT char *outFileName) { FILE *fpOUT; fpOUT = fopen(outFileName,"w+"); fwrite(filedata,1,size,fpOUT); fclose(fpOUT); } int main() { char *outFile = "outfile.mp4"; FILE *fpOUT; fpOUT = fopen(outFile,"w+"); char *origin_file = "1-1.mp4"; int orgfilesize = FileSize(origin_file); // 获取文件的大小 char *file_data=malloc(orgfilesize); // 分配文件大小的内存 ReadFileData(origin_file, file_data); // 读取文件 fwrite(file_data,1,orgfilesize,fpOUT); // char *outFile = "outfile.mp4"; // WriteToFile(file_data,orgfilesize,outFile); // 写出文件 char *origin_file1 = "1-2.mp4"; int orgfilesize1 = FileSize(origin_file1); // 获取文件的大小 char *file_data1=malloc(orgfilesize1); // 分配文件大小的内存 ReadFileData(origin_file1, file_data1); // 读取文件 fwrite(file_data1,1,orgfilesize1,fpOUT); char *origin_file2 = "1-3.mp4"; int orgfilesize2 = FileSize(origin_file2); // 获取文件的大小 char *file_data2=malloc(orgfilesize2); // 分配文件大小的内存 ReadFileData(origin_file2, file_data2); // 读取文件 fwrite(file_data2,1,orgfilesize2,fpOUT); char *origin_file3 = "1-4.mp4"; int orgfilesize3 = FileSize(origin_file3); // 获取文件的大小 char *file_data3=malloc(orgfilesize3); // 分配文件大小的内存 ReadFileData(origin_file3, file_data3); // 读取文件 fwrite(file_data3,1,orgfilesize3,fpOUT); char *origin_file4 = "1-5.mp4"; int orgfilesize4 = FileSize(origin_file4); // 获取文件的大小 char *file_data4=malloc(orgfilesize4); // 分配文件大小的内存 ReadFileData(origin_file4, file_data4); // 读取文件 fwrite(file_data4,1,orgfilesize4,fpOUT); // 后面还可以增加更多文件 fclose(fpOUT); return 0; }
最新回复(0)