C++ 有人能告诉我为什么复制这样的文件不会';不行?
我正试图逐字节复制exe文件。我比较了2的十六进制文件,它们完全不同。似乎有些值没有加载进去C++ 有人能告诉我为什么复制这样的文件不会';不行?,c++,windows,file,copy,C++,Windows,File,Copy,我正试图逐字节复制exe文件。我比较了2的十六进制文件,它们完全不同。似乎有些值没有加载进去 #include <iostream> #include <fstream> #include <vector> using namespace std; int main(){ ifstream fin("file.exe", ifstream::binary); vector<char> buffer(1, 0); o
#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;
}
}
}
}
#包括
#包括
#包括
使用名称空间std;
int main(){
ifstream-fin(“file.exe”,ifstream::binary);
向量缓冲区(1,0);
流新文件;
打开(“newfile.exe”,ios::binary);
而(fin.read(buffer.data(),buffer.size()){
streamsize s=fin.gcount();
对于(int i=0;i NefFix.P>为什么你用一个代码< char < />代码来读取和写入一个向量?<代码> s >代码>的目的是什么?为什么你试图用IoSokes来比较<代码> EOF?这个代码看起来是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)
);
}
#包括
#包括
#包括
#包括。它可以比你快得多!例如,在Windows上。谢谢你的帮助。这就是我完成工作的原因
#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;
}
}
#包括
#包括
使用名称空间std;
int main(){
ifstream是(“file.exe”,ios::binary);
流fs(“newfile.exe”,ios::binary);
如果(是){
is.seekg(0,is.end);
int length=is.tellg();
is.seekg(0,is.beg);
字符*缓冲区=新字符[长度];
is.read(缓冲区、长度);
is.close();
for(int i=0;i fs是否需要streamsize s=fin.gcount()语句?无论如何,您不使用它的结果。该向量是为了防止我一次捕获多个字节。我将其与EOF进行比较,因为到目前为止,这已经奏效。最明显的问题是buffer[I]!=EOF
。因为buffer[I]
包含一个字符,而EOF
不是一个字符,这种比较毫无意义。@Jlegend:但您在这里抱怨它不起作用……一个问题是文件流是块设备,这意味着它喜欢在大块中传输数据。我建议向量的最小大小为512(公共扇区大小).甚至更简单:newfile@DavidHaim:Yeah或that:)(rdbuf
)我建议OP为此找到一个OS API。OS应该已经测试了一些优化的文件复制功能。
#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;
}
}