【发布时间】:2015-05-28 19:19:42
【问题描述】:
我正在尝试逐字节复制 exe 文件。我比较了 2 的十六进制文件,它们完全不同。似乎有些值没有被加载..
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main(){
ifstream fin("file.exe", ifstream::binary);
vector<char> buffer(1, 0);
ofstream newfile;
newfile.open("newfile.exe", ios::binary);
while (fin.read(buffer.data(), buffer.size())){
streamsize s = fin.gcount();
for (int i = 0; i < buffer.size(); i++){
if (buffer[i] != EOF){
newfile << buffer[i];
cout << buffer[i] << endl;
} else {
break;
}
}
}
}
【问题讨论】:
-
你需要streamsize s = fin.gcount() 语句吗?无论如何,你不会使用它的结果。
-
该向量是为了以防我想开始一次抓取多个字节。我将其与 EOF 进行比较,因为到目前为止它已经奏效了。
-
最明显的问题是
buffer[i] != EOF。由于buffer[i]包含一个字符而EOF不是一个字符,所以这种比较没有意义。 -
@Jlegend:然而你在这里抱怨它不起作用工作......
-
一个问题是文件流是一个 block 设备,这意味着它喜欢以大块的形式传输数据。我建议向量的最小大小为 512(常见的扇区大小)。