我试图逐字节复制exe文件。我比较了2的hex文件,它们是完全不同的。似乎某些值没有加载..
#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;
}
}
}
}
答案 0 :(得分:7)
为什么你用一个char
读入和写出一个向量? s
的目的是什么?为什么要尝试将EOF
与IOStream进行比较?这段代码似乎是C和C ++的奇怪混合,结果完全被破坏了!
我是这样做的:
#include <iostream>
#include <fstream>
#include <iterator>
#include <algorithm>
int main()
{
std::ifstream fin ("file.exe", std::ios::binary);
std::ofstream fout("newfile.exe", std::ios::binary);
std::copy(
std::istream_iterator<char>(fin),
std::istream_iterator<char>(),
std::ostream_iterator<char>(fout)
);
}
甚至只是:
#include <iostream>
#include <fstream>
int main()
{
std::ifstream fin ("file.exe", std::ios::binary);
std::ofstream fout("newfile.exe", std::ios::binary);
fout << fin.rdbuf();
}
没有麻烦,没有大惊小怪!
这对于一般情况下的流非常有用,但是,if all you want to do is perform a byte-for-byte file copy, you'd get your OS to do it for you。它可以比你快得多!例如,Windows上的CopyFile
。
答案 1 :(得分:0)
谢谢你的帮助。这就是我最终完成工作的方式。
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream is("file.exe", ios::binary);
ofstream fs("newfile.exe", ios::binary);
if (is) {
is.seekg(0, is.end);
int length = is.tellg();
is.seekg(0, is.beg);
char * buffer = new char[length];
is.read(buffer, length);
is.close();
for (int i = 0; i < length; i++) {
fs << buffer[i];
}
delete[] buffer;
}
}