设为首页 加入收藏

TOP

封装几个关于流IStream的功能函数
2014-11-15 20:41:42 】 浏览:4615
Tags:封装 关于 IStream 功能 函数

  // =====================================================


  // 根据文件创建流对象


  // 参数:pszFile 文件路径


  // ppStream 保存创建的流对象


  // 返回值:返回创建成功与否


  // 说明:用完ppStream需释放


  // =====================================================


  BOOL CreateStreamFromFile (LPCTSTR pszFile, IStream** ppStream)


  {


  //打开文件


  HANDLE hFile = ::CreateFile (pszFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );


  if (hFile == INVALID_HANDLE_VALUE)


  return FALSE;


  BOOL bSuccess = TRUE;


  do


  {


  bSuccess = FALSE;


  //获取文件长度


  LARGE_INTEGER lSize;


  if (!::GetFileSizeEx (hFile, &lSize))


  break;


  //分配文件长度大小的内存块


  HGLOBAL hGlobal;


  hGlobal = ::GlobalAlloc (GPTR, lSize.LowPart);


  if (hGlobal == NULL)


  break;


  //将文件数据读入内存块


  void* pBuffer = (void*)hGlobal;


  DWORD dwReaded(0);


  if (::ReadFile (hFile, pBuffer, lSize.LowPart, &dwReaded, NULL))


  {


  //在内存块上创建流


  bSuccess = SUCCEEDED (::CreateStreamOnHGlobal (hGlobal, TRUE, ppStream));


  }


  } while (FALSE);


  ::CloseHandle (hFile);


  return bSuccess;


  }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇std::vector实例化不需要类定义 下一篇C++builder消息的运用

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目