【发布时间】:2021-09-16 07:08:38
【问题描述】:
我有一个程序需要对不同类型的文件进行操作。 我希望下面程序的输入和输出文件是一样的。
#include<iostream>
#include<string>
#include<fstream>
#include<sstream>
typedef unsigned char u8;
using namespace std;
char* readFileBytes(string name)
{
ifstream fl(name);
fl.seekg( 0, ios::end );
size_t len = fl.tellg();
char *ret = new char[len];
fl.seekg(0, ios::beg);
fl.read(ret, len);
fl.close();
return ret;
}
int main(int argc, char *argv[]){
string name = "file.pdf";
u8* file = (u8*) readFileBytes(name);
// cout<<str<<endl;
int len = 0;
while(file[len] != '\0')
len++;
cout<<"FILESIZE : "<<len<<endl;
string filename = "file2.pdf";
ofstream outfile(filename,ios::out | ios::binary);
outfile.write((char*) file,len);
outfile.close();
exit(0);
}
使用diff检查输出和输入文件之间的差异
diff file.pdf file2.pdf
我应该怎么做才能使file2.pdf与file.pdf相同?
我曾尝试使用xxd 将二进制转换为十六进制,但缺点是整体大小翻了一番。因此,我只想以二进制方式操作。
【问题讨论】:
-
不确定您是否应该检查 '\0' 您的二进制文件不是字符串,因此此处不适用空终止符。我建议将字节读入 std::vector 并从你的函数中返回它并使用向量的大小写出数据
-
这也避免了内存泄漏:)
-
您也可以使用
std::string来存储整个文件。 example