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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++创建不同扩展名的文件相关的知识,希望对你有一定的参考价值。

我目前有一个程序,用于将文件读取为二进制文件,将内容保存到变量中,并将其写回具有相同扩展名的新文件。我用不同类型的文件测试了程序,只有一些正在运行。像.exe,媒体文件(.mp4,.jpg)这样的文件不起作用,而.txt,pdf,doc确实有效。

为了确保程序读/写是否有错误,我打开了不能使用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
";
    }
    else {
        cout << files[c] << " : File found
";

        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;

}

Edit2:修正了

感谢所有帮助人员。 fprintf的尾随空格导致错误。所有写入的开头都写入了一个空格。

答案

像可执行文件(.exe),媒体文件(.mp4,.jpg)这样的文件有自己的标题,其中包含必要的数据,当你读/写它时,你基本上通过从原始地址替换必要的数据来破坏这些文件, Notepad ++也可能不会复制原始二进制数据。 https://en.wikipedia.org/wiki/File_format

另一答案

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

以上是关于C ++创建不同扩展名的文件的主要内容,如果未能解决你的问题,请参考以下文章

C编译器是否总是,从不或有时排除代码未触及的文件级数组?

使用 Linux C 代码和头文件编译 Windows DLL

Visual C++6里创建源文件和头文件有啥区别

C、C++ 或 Fortran 的代码抛光器/重新格式化器 [关闭]

C#.net在不打开文件的情况下导出数据到已有excel文件中

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段