将文件加载到内存流

    技术2022-05-19  22

    /**函数介绍:将文件加载到内存流中*入口参数:tszFilename:表示要打开的文件*出口参数: ppStream : 表示内存流,将文件中的内容输出到此内存流中*返回值:S_OK :表示成功,否则失败*/HRESULT CreateStreamOnFile(const TCHAR * tszFilename, IStream ** ppStream){    HRESULT hrRet = S_FALSE;    HGLOBAL hg = NULL;    HANDLE hFile = NULL;    DWORD dwSize, dwRead;    BYTE* pbLocked = NULL;

        //打开文件    hFile = CreateFile(tszFilename, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);    if (INVALID_HANDLE_VALUE == hFile)    {        goto error;    }

     //得到文件大小    dwSize = GetFileSize(hFile, NULL);    if (0xffffffff == dwSize)    {        goto error;    }

        //分配内存    hg = GlobalAlloc(GMEM_MOVEABLE, dwSize);    if (NULL == hg)    {        goto error;    }

        //得到已经分配的内存指针    pbLocked = (BYTE*) GlobalLock(hg);    if (NULL == pbLocked)    {        goto error;    }

        //读取文件内容到内存中    if (!ReadFile(hFile, pbLocked, dwSize, &dwRead, NULL))    {        goto error;    }

     //解锁已经分配全局内存,对应GlobalLock(hg)    GlobalUnlock(hg);        //创建Stream对象    hrRet = CreateStreamOnHGlobal(hg, TRUE, ppStream);

     //关闭文件流    CloseHandle(hFile);    return hrRet;error: //错误处理,并释放内存    if (pbLocked)        GlobalUnlock(hg);    if (hg)        GlobalFree(hg);    if (hFile)        CloseHandle(hFile);    return hrRet;}


    最新回复(0)