Jle*_*end 0 c++ windows copy file
我试图逐字节复制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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么你用一个单独读入和写出一个向量char?目的是s什么?为什么要尝试EOF与IOStreams 进行比较?这段代码似乎是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)
);
}
Run Code Online (Sandbox Code Playgroud)
甚至只是:
#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();
}
Run Code Online (Sandbox Code Playgroud)
没有麻烦,没有大惊小怪!
这对于一般情况下的流非常有效,但是,如果你想要做的就是执行逐字节文件副本,你就可以让你的操作系统为你完成.它可以比你快得多!例如,CopyFile在Windows上.