C ++ Windows如何从内存中打开文件

问题描述 投票:0回答:1

我试图从互联网上下载更新的文件并打开它。目前我通过将文件下载到磁盘来工作,我想知道是否有可能将文件下载到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 
   }
c++ file memory download
1个回答
0
投票

很容易将IStream送到内存区域,为此使用SHCreateMemStream。但是,如果你想要的'文件打开'实际上是ShellExecute来调用那种文件的默认行为(就像我期望的那样.exe),它必须在某处写入磁盘。

© www.soinside.com 2019 - 2024. All rights reserved.