我正在尝试从互联网上下载更新的文件并将其打开。 目前我通过将文件下载到磁盘来工作,我想知道是否可以将文件下载到char数组然后以某种方式从内存中打开文件?
有时我的文件将是exe(更新当前程序),有时只是一个带有新用法信息的文本文件。
以下是我在下载时将文件读入内存的内容,但我不确定从内存中打开该文件的位置。
#include <ShlObj.h>
#include <urlmon.h>
#include <atlbase.h> // CComPtr
bool downloadToMemory(){
char* fileBuffer = 0;
ComInIt init;
CComPtr<IStream> pStream;
// Open HTTP Request
HRESULT hr = URLOpenBlockingStream(nullptr, host.c_str(), &pStream, 0, nullptr);
if (FAILED(hr))
{
return false;
}
else
{
DWORD bytesRead = 1;
std::size_t total = 0;
while(bytesRead > 0 && hr != S_FALSE)
{
// Dynamically increase buffer size
fileBuffer = (char*)realloc(fileBuffer, bytesRead + 4096 * sizeof(char));
hr = pStream->Read(fileBuffer, sizeof(fileBuffer), &bytesRead);
total += bytesRead;
}
// Do something here with fileBuffer
}
答案 0 :(得分:0)
很容易将IStream送到内存区域,使用SHCreateMemStream。但是,如果&#39;文件打开&#39;你想要的实际上是ShellExecute来调用那种文件的默认行为(就像我期望的那样。),它必须在某处写入磁盘。