gpt4 book ai didi

c++ - 如何以二进制模式读取并将信息传输到新文件

转载 作者:行者123 更新时间:2023-12-02 10:09:18 25 4
gpt4 key购买 nike

我尝试以二进制模式打开和读取应用程序,并以二进制模式获取100个字符(对于大文件,我这样做是为了读取所有字符),然后将它们传输到新文件(实际上,该程序会与上一个程序相同,但名称不同),以查看其是否正常运行
所以无论如何我的源代码是:

#include <iostream>
#include <vector>
#include <fstream>

using namespace std;
int main()
{
//Vector of 100 characters initialised to 0
vector<char> ch(100, 0);
ifstream file("example.exe",ios::in|ios::binary);
if (file.is_open())
{

while (file)
{
file.read(ch.data(), 100);
// Get the number of bytes actually read
size_t count = file.gcount();
ch[file.gcount()] = '\0';
//cout << ch.data() << endl;
ofstream output("output.exe", ios::out | ios::binary | ios::app);
output.write(ch.data(), sizeof(100));
output.close();

}
}
file.close();
}
我的问题是不包含具有正确信息的输出,并且其大小小于原始应用程序(example.exe)的情况。

最佳答案

output.write(ch.data(), sizeof(100));应该用output.write(ch.data(), count);代替
由于sizeof(100)仅返回4,它是整数的字节大小。
您还应该删除ch[file.gcount()] = '\0';行,因为file.gcount()可能超出范围。
我刚刚测试了它,这对我有用

#include <iostream>
#include <vector>
#include <fstream>

using namespace std;
int main()
{
vector<char> ch(100, 0);
ifstream file("app.exe",ios::in|ios::binary);
if (file.is_open())
{
ofstream output("app_copy.exe", ios::out | ios::binary | ios::trunc);
while (file)
{
file.read(ch.data(), 100);
output.write(ch.data(), file.gcount());
}
output.close();
}
file.close();
}
请注意, ios::app替换为 ios::trunc,它将在打开时删除文件的内容。

关于c++ - 如何以二进制模式读取并将信息传输到新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64279384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com