那位兄弟用过微软的IStorage接口,并用该接口读取过compound file format,能否给小弟一些指导,最好能够提供源码,先谢过了。
解决方案 »
- 关于视频采集卡采集到的图片
- DebugProc中DEBUGHOOKINFO的成员idThread值总是为当前线程ID
- ACC格式的视频文件文件是什么东西(高手帮忙)
- 如何得到ACCESS数据库中的文件名
- c文件读的程序输入问题(在线等)
- 各位大哥,小弟传送结构,总是只能收到一位,帮小弟看看
- 关于CSocket的超时问题
- 关于Expression:_CrtIsValidHeapPointer(pUserData)的问题
- 100分求助,请问怎么用FILE实现文件保存?
- 请教一个VC的调试技巧:在《深入浅出MFC》的P500有这样一一个例子......
- 在LISTCTRL中使用FINDITEM()查找功能,请个一段代码示例!!!
- 在使用SetWorldTransform后怎样判断某个点在经过Transform后的图形中?
然后IStorage就像目录,IStream就像文件,和操作目录一样操作
{
// TODO: Add your control notification handler code here
UpdateData(true);
m_nLevel = 0;
LPSTORAGE pStgRoot = NULL;
m_szCompFile = "d:\\comp.dem";
m_szDir = "d:\\code\\";
// CLSID clsid;
// ::CLSIDFromProgID(OLESTR("ATLTest.TextObject"), &clsid); OLECHAR dir[MAX_PATH * 2];
mbstowcs(dir, m_szCompFile, m_szCompFile.GetLength()+1);
if (FAILED(::StgCreateDocfile(dir,
STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE,
0,
&pStgRoot)))
{
MessageBox("create docfile failed!");
return;
} ReadDirectory(m_szDir, pStgRoot);
pStgRoot->Release(); MessageBox("create docfile complete!");
return;
// HMODULE hDllModule = ::LoadLibrary(_T("C:\\Program Files\\Microsoft Visual Studio\\MyProjects"
// "\\persist01\\Debug\\persist01.dll"));
//
// int (_stdcall *pRegSvr)() = ::GetProcAddress(hDllModule, _T("DllRegisterServer"));
// HRESULT hr = pRegSvr();}
VOID CCompDocDlg::ReadDirectory(const char* szDir, IStorage *pStgRoot)
{
m_nLevel++; char szNewPath[MAX_PATH];
strcpy(szNewPath, szDir);
strcat(szNewPath, "*.*"); WIN32_FIND_DATA FindData;
HANDLE h = ::FindFirstFile(szNewPath, &FindData);
if (h == INVALID_HANDLE_VALUE)
{
return;
}
char *ptest = FindData.cFileName; OLECHAR wcsStorageName[MAX_PATH * 2]; // subStorageName
OLECHAR wcsStreamName[MAX_PATH * 2]; // stream name
char szData[512]; // file content
do
{
// unknown!!!
if (!strcmp(FindData.cFileName, "..")
|| !strcmp(FindData.cFileName, "."))
{
continue;
} // unknown!!!
char *pch = NULL;
while ((pch = strchr(FindData.cFileName, '!')) != NULL)
{
MessageBox(FindData.cFileName);
*pch = '|';
}
if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
strcpy(szNewPath, szDir);
strcat(szNewPath, FindData.cFileName);
strcat(szNewPath, "\\");
mbstowcs(wcsStorageName, FindData.cFileName, 32);
wcsStorageName[32] = L'\0';
// why?
TRACE("%d -- sStorage = %s\n", (m_nLevel - 1) * 4, wcsStorageName);
IStorage *pSubStg = NULL;
pStgRoot->CreateStorage(wcsStorageName,
STGM_CREATE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE,
0,
0,
&pSubStg
);
if (pSubStg == NULL)
{
return;
} ReadDirectory(szNewPath, pSubStg);
pSubStg->Release();
}
else
{
if ((pch = strrchr(FindData.cFileName, '.')) != NULL)
{
if (!stricmp(pch, ".txt")
|| !stricmp(pch, ".c")
|| !stricmp(pch, ".h")
|| !stricmp(pch, ".cpp")
)
{
mbstowcs(wcsStreamName, FindData.cFileName, 32);
wcsStreamName[32] = L'\0'; strcpy(szNewPath, szDir);
strcat(szNewPath, FindData.cFileName);
CStdioFile file(szNewPath, CFile::modeRead);
if (file.ReadString(szData, 511))
{
IStream *pStream = NULL;
pStgRoot->CreateStream(wcsStreamName,
STGM_CREATE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE,
0,
0,
&pStream
);
if (pStream == NULL)
{
return;
} pStream->Write(szData, 511, NULL);
pStream->Release();
}
}
}
}
} while(::FindNextFile(h, &FindData)); m_nLevel--;
return;}