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 ++创建不同扩展名的文件的主要内容,如果未能解决你的问题,请参考以下文章
如何将 google+ 登录代码放在不同的 java 源文件中