You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C语言合并二进制文件分片?(Curl多段下载场景)

合并二进制分片文件的C语言实现

关于fwrite参数的说明

你在Curl回调里的fwrite(ptr, sz, nmemb, stream)写法完全正确。这里sz是单个数据块的字节大小,nmemb是块的数量,fwrite会把sz*nmemb字节的二进制数据原样写入文件,不会对内容做任何修改,完全适配视频、ISO这类二进制文件的分片写入需求。

合并分片的具体实现

要将filepath1.x、filepath2.x、filepath3.x合并为output.mp4,核心逻辑是按顺序以二进制模式读取每个分片,将内容原样写入输出文件,代码示例如下:

#include <stdio.h>
#include <stdlib.h>

#define BUFFER_SIZE 4096  // 缓冲区大小可根据内存情况调整

int main() {
    // 按分片的正确顺序定义路径列表
    const char* chunk_files[] = {"filepath1.x", "filepath2.x", "filepath3.x"};
    int chunk_count = sizeof(chunk_files) / sizeof(chunk_files[0]);
    
    // 打开输出文件,二进制写入模式(wb会覆盖已有文件,确保从头开始写入)
    FILE* output = fopen("output.mp4", "wb");
    if (!output) {
        perror("Failed to open output file");
        return EXIT_FAILURE;
    }

    char buffer[BUFFER_SIZE];
    size_t bytes_read;

    // 逐个处理分片文件
    for (int i = 0; i < chunk_count; i++) {
        FILE* chunk = fopen(chunk_files[i], "rb");
        if (!chunk) {
            perror(chunk_files[i]);
            fclose(output);
            return EXIT_FAILURE;
        }

        // 循环读取分片内容,写入输出文件
        while ((bytes_read = fread(buffer, 1, BUFFER_SIZE, chunk)) > 0) {
            if (fwrite(buffer, 1, bytes_read, output) != bytes_read) {
                perror("Failed to write to output file");
                fclose(chunk);
                fclose(output);
                return EXIT_FAILURE;
            }
        }

        // 检查分片读取是否出现错误
        if (ferror(chunk)) {
            perror(chunk_files[i]);
            fclose(chunk);
            fclose(output);
            return EXIT_FAILURE;
        }

        fclose(chunk);
    }

    fclose(output);
    printf("合并完成!\n");
    return EXIT_SUCCESS;
}

关键注意事项

  • 强制使用二进制模式:打开文件时必须用rb(读分片)和wb(写输出),避免文本模式下系统自动转换换行符(比如Windows下的\r\n转\n),导致二进制文件结构损坏。
  • 严格按顺序合并:Range请求的分片是按原文件字节范围拆分的,必须严格遵循下载时的顺序合并,否则最终文件会因内容乱序而无法正常使用。
  • 错误检查不可少:代码中加入了文件打开、读写的错误判断,能及时发现并反馈问题,避免生成损坏的输出文件却未被察觉。

内容的提问来源于stack exchange,提问作者amateur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:47:35