gpt4 book ai didi

c++ - 使用 ifstream 读取二进制文件

转载 作者:行者123 更新时间:2023-11-30 02:27:03 35 4
gpt4 key购买 nike

我正在尝试读入 .exe 并将其写回。我的代码适用于 .txt 文件,但由于某种原因它破坏了可执行文件。我究竟做错了什么?不知道是我读错了还是写错了..

#include <string>
#include <vector>
#include <iostream>
#include <filesystem>
#include <unordered_set>

#include <Windows.h>

unsigned char *ReadFileAsBytes(std::string filepath, DWORD &buffer_len)
{
std::ifstream ifs(filepath, std::ofstream::binary | std::ifstream::ate);
if (!ifs.is_open())
{
return(nullptr);
}

// Go To End
ifs.seekg(0, ifs.end);

// Get Position (Size)
buffer_len = static_cast<DWORD>(ifs.tellg());

// Go To Beginning
ifs.seekg(0, ifs.beg);

// Allocate New Char Buffer The Size Of File
PBYTE buffer = new BYTE[buffer_len];

ifs.read(reinterpret_cast<char*>(buffer), buffer_len);
ifs.close();

return buffer;
}

void WriteToFile(std::string argLocation, unsigned char *argContents, int argSize)
{
std::ofstream myfile;
myfile.open(argLocation);
myfile.write((const char *)argContents, argSize);
myfile.close();
}

int main()
{
// Config
static std::string szLocation = "C:\\Users\\Admin\\Desktop\\putty.exe";
static std::string szOutLoc = "C:\\Users\\Admin\\Desktop\\putty2.exe";

DWORD dwLen;
unsigned char *szBytesIn = ReadFileAsBytes(szLocation, dwLen);

std::cout << "Read In " << dwLen << " Bytes" << std::endl;

// Write To File
WriteToFile(szOutLoc, szBytesIn, dwLen);

system("pause");
}

最佳答案

您以二进制模式打开输入文件,但在此代码中

std::ofstream myfile;
myfile.open(argLocation);

您在没有二进制模式的情况下打开输出文件。并且没有理由单独调用 open:

std::ofstream myfile( argLocation, std::ios::out | std::ios::binary | std::ios::trunc);

关于c++ - 使用 ifstream 读取二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42150509/

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