描述:
最近做东西要用到ISTREAM,但这个好像只能跟ISTORAGE用,有没有办法让ISTREAM直接操作一般的文件?
解决方案1:
BOOL CreateStreamFromFile( LPCSTR filePath, IStream *pStream )
{
HANDLE hFile = CreateFile( filePath,
GENERIC_READ, // Open for reading
FILE_SHARE_READ, // Share for reading
NULL, // No security
OPEN_EXISTING, // Existing file only
FILE_ATTRIBUTE_NORMAL, // Normal file
NULL); // No template file
BOOL bResult = FALSE;
if( hFile != NULL )
{
DWORD dwSize = GetFileSize( hFile, NULL );
if( dwSize != 0xFFFFFFFF && dwSize > 0 )
{
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwSize);
if (hGlobal != NULL)
{
LPVOID pvData = NULL;
pvData = GlobalLock(hGlobal);
if( pvData != NULL)
{
DWORD nBytesRead;
BOOL bRet = ReadFile(hFile, pvData, dwSize, &nBytesRead, NULL);
GlobalUnlock(hGlobal);
if( bRet )
{
HRESULT hRet = CreateStreamOnHGlobal(hGlobal, TRUE, &pStream);
if( SUCCEEDED(hRet) )
{
bResult = TRUE;
}
}
}
else
{
GlobalFree( hGlobal );
}
}
}
}
return bResult;
}
自己实现一个FileStream就可以了。
解决方案3:不行啊,要得IStoreage
解决方案4:http://blog.csdn.net/lion_wing/archive/2006/06/27/839134.aspx