linux c语言实现断点续传
2023-12-26 12:46:27
#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;
}
文章来源:https://blog.csdn.net/weixin_38849487/article/details/135215571
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!