C++ 创建不同扩展名的文件

C++ Creating files of different extensions

我目前有一个程序可以将文件读取为二进制文件,将内容保存到一个变量中,然后将其写回具有相同扩展名的新文件。我用不同类型的文件测试了这个程序,只有一些在工作。 .exe、媒体文件(.mp4、.jpg)等文件不起作用,而 .txt、pdf、doc 却起作用。

为了确定它是否是程序中的错误read/write,我打开了不能使用 Notepad++ 的文件,并将全部内容复制到一个具有相同扩展名的新文件中。这些文件仍然不起作用。

那我错过了什么?抱歉英语不好。谢谢!

编辑:

int archive(string files[], string output, int file_len) {
FILE *read_ptr, *write_ptr;
size_t result;
long file_size;
char *buffer;
char entry_text [8] = "###=###";

for(int c = 0; c < file_len; c++) {
    read_ptr = fopen(files[c].c_str(), "rb");
    if(read_ptr == NULL) {
        cout << files[c] << " : File not found\n";
    }
    else {
        cout << files[c] << " : File found\n";

        write_ptr = fopen(output.c_str(), "ab");

        fseek(read_ptr, 0, SEEK_END);
        file_size = ftell(read_ptr);
        rewind(read_ptr);

        buffer = (char*) malloc (sizeof(char)*file_size);
        result = fread(buffer, 1, file_size, read_ptr);

        fprintf(write_ptr, "%s %s %d ", entry_text, files[c].c_str(), file_size);
        fwrite(buffer, 1, file_size, write_ptr);

        fclose(write_ptr);
    }
}

return 0;

}

编辑 2:已修复

感谢大家的帮助。 fprintf 的尾随 space 导致错误。 A space 写入了所有写入的开头。

没有代码很难提供帮助,但一般提示是检查您是否以正确的模式(二进制或文本)打开文件。例如 fopen 函数有第三个参数 mode 说明模式" http://www.cplusplus.com/reference/cstdio/fopen/

可执行文件 (.exe)、媒体文件(.mp4、.jpg)等文件都有自己的 header,其中包含运行所需的数据,当您 reading/writing 时,您基本上就是在破坏通过从原始地址替换必要的数据来复制这些文件,Notepad++ 可能也不会复制原始二进制数据。 https://en.wikipedia.org/wiki/File_format