2017-12-23 46 views
0

更新されたファイルをインターネットからダウンロードして開こうとしています。 現在、私はディスクにファイルをダウンロードして作業していますが、ファイルをchar配列にダウンロードして、何らかの形でメモリからファイルを開くことが可能かどうか疑問に思っていましたか?C++ Windowsメモリからファイルを開く方法

私のファイルは、(現在のプログラムを更新するための)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

メモリ領域にIStreamを取得するのは簡単ですが、そのためにSHCreateMemStreamを使用してください。しかし、あなたが望む 'ファイルを開く'が実際にShellExecuteであれば、その種のファイルのデフォルトの動作を呼び出すことができます(私は.exeのように)どこかのディスクに書き込まなければなりません。

関連する問題