#include <stdio.h>
#include <stdlib.h>
#define PACKAGE_SIZE (8) // 定义包的大小为8字节
#define INPUT_FILENAME "example.txt" // 输入文件名
#define OUTPUT_FILENAME "output.txt" // 输出文件名
int main() {
FILE *input_fp, *output_fp;
int start_package = 2; // 起始包的位置(从0开始计数)
int num_packages, last_package_size;
// 打开输入文件
input_fp = fopen(INPUT_FILENAME, "rb");
if (input_fp == NULL) {
printf("无法打开输入文件\n");
return 1;
}
// 获取输入文件大小
fseek(input_fp, 0, SEEK_END);
long file_size = ftell(input_fp);
fseek(input_fp, 0, SEEK_SET);
// 计算包数目和最后一个包的大小
num_packages = file_size / PACKAGE_SIZE;
last_package_size = file_size % PACKAGE_SIZE;
// 打开输出文件以追加写入模式(如果存在),或新建文件
output_fp = fopen(OUTPUT_FILENAME, "ab");
if (output_fp == NULL) {
output_fp = fopen(OUTPUT_FILENAME, "wb");
if (output_fp == NULL) {
printf("无法创建输出文件\n");
fclose(input_fp);
return 1;
}
}
// 跳过指定位置之前的包
fseek(input_fp, start_package * PACKAGE_SIZE, SEEK_SET);
// 读取指定位置的包并写入输出文件
for (int i = start_package; i < num_packages; i++) {
char *buffer = (char *)malloc(PACKAGE_SIZE);
fread(buffer, 1, PACKAGE_SIZE, input_fp);
// 写入输出文件
fwrite(buffer, 1, PACKAGE_SIZE, output_fp);
free(buffer);
}
// 如果有最后一个包,继续读取并写入输出文件
if (last_package_size > 0) {
char *buffer = (char *)malloc(last_package_size);
fread(buffer, 1, last_package_size, input_fp);
// 写入输出文件
fwrite(buffer, 1, last_package_size, output_fp);
free(buffer);
}
// 关闭文件
fclose(input_fp);
fclose(output_fp);
return 0;
}