簡體   English   中英

C ++ Windows如何從內存中打開文件

[英]C++ Windows How to Open File From Memory

我正在嘗試從互聯網下載更新的文件並打開它。 目前,我可以通過將文件下載到磁盤上來工作,我想知道是否可以將文件下載到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 
   }

使IStream到達內存區域很容易,為此可以使用SHCreateMemStream。 但是,如果您想要的“文件打開”實際上是ShellExecute來調用此類文件的默認行為(正如我期望的.exe那樣),則必須將其寫入磁盤中的某個位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM