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

时间:2017-12-23 16:54:25

标签: c++ file memory download

我正在尝试从互联网上下载更新的文件并将其打开。 目前我通过将文件下载到磁盘来工作,我想知道是否可以将文件下载到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 
   }

1 个答案:

答案 0 :(得分:0)

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