使用C程序合并n个文件

Ama*_*mal 1 c

我正在写一个下载加速器.所以我将网络服务器上的文件下载到n个部分.现在我想将文件合并为1个单个文件.所以我使用以下代码.文件名的顺序正确.但我得到的输出文件与原始下载文件不同.你能告诉我错误在哪里吗?C

int cbd_merge_files(const char** filenames, int n, const char* final_filename) {

  FILE* fp = fopen(final_filename, "wb");

  if (fp == NULL) return 1;

  char buffer[4097];

  for (int i = 0; i < n; ++i) {

    const char* fname = filenames[i];

    FILE* fp_read = fopen(fname, "rb");

    if (fp_read == NULL) return 1;

    int n;

    while ((n = fread(buffer, sizeof(char), 4096, fp_read))) {

        int k = fwrite(buffer, sizeof(char), n, fp);

        if (!k) return 1;
    }
    fclose(fp_read);

 }

 fclose(fp);

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

添加更多细节.错误不在分区中,因为我能够执行"cat*.part> final.dmg"并且final.dmg工作并且与原始相同.

小智 5

你的功能对我来说似乎没问题,所以很可能问题出在这个函数的输入文件中.通常,如果在输出中遇到此类问题,则值得单独测试每个函数以找出问题的确切位置.您在那里的功能很容易测试,例如:

int main(int argc, const char** argv)
{
  cbd_merge_files(argv+1, argc-1, "output.txt");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我尝试用两个文件运行你的函数,其中包含"123"和"321",并在output.txt中生成正确的输出.