建立個MFC的簡單功能來調用如下接口 void testWrite() { // TODO: Add your control notification handler code here const unsigned short *FILENAME = L"c:\\test.stg"; DWORD dwMode=STGM_WRITE|STGM_CREATE|STGM_SHARE_EXCLUSIVE; // 只寫|若是文件存在則替換,不存在則建立|獨佔 IStorage *pStgRoot,*pStgSub; IStream *pStream; pStgRoot=NULL; // 設爲NULL,能夠知道函數是否執行成功 //////////////////////////////////////////////////////////////////////////////// // 建立複合文檔 // 若是文件不存在則建立一個新文件,已經存在則替換原文件 // 建立完成後獲得一個新的storage對象,可用於建立一個根目錄 StgCreateDocfile( FILENAME, // 複合文檔路徑 dwMode, // 請問模式 0, // 必須爲0 &pStgRoot // 返回一個新的storage對象 ); //////////////////////////////////////////////////////////////////////////////// // 建立一個根目錄,並準備建立一個子目錄 pStgRoot->CreateStorage( L"StgRoot", // 子IStorage的名稱 dwMode, // 請問模式 0, // 必須爲0 0, // 必須爲0 &pStgSub // 返回一個新的storage對象 ); //////////////////////////////////////////////////////////////////////////////// // 建立一個數據流(結點),並準備寫入數據 pStgSub->CreateStream( L"Stm", // 子IStream的名稱 dwMode, // 請問模式 0, // 必須爲0 0, // 必須爲0 &pStream // 返回一個新的IStream接口指針 ); //////////////////////////////////////////////////////////////////////////////// // 寫入數據 char strText[]={"Hello World2!"}; ULONG actWrite; int nLen=strlen(strText); // 字串長度 pStream->Write( strText, // 要寫入的數據 nLen, // 要寫入數據的長度 &actWrite // 實際寫入長度,也能夠設爲NULL ); //////////////////////////////////////////////////////////////////////////////// // 釋放資源 // 若是不調用Release()方法,會致使寫入不徹底、文檔體積大、沒法正常讀取等問題 pStream->Release(); pStgSub->Release(); pStgRoot->Release(); //////////////////////////////////////////////////////////////////////////////// CString strMsg; strMsg.Format("數據長度:%d , 實際寫入長度:%ld",nLen,actWrite); AfxMessageBox(strMsg); cout<<strMsg.GetBuffer(100)<<endl; } void testRead() { DWORD dwMode=STGM_READ|STGM_SHARE_EXCLUSIVE; // 只讀|獨佔 const unsigned short *FILENAME = L"c:\\test.stg"; IStorage *pStgRoot,*pStgSub; IStream *pStream; pStgRoot=NULL; pStgSub=NULL; pStream=NULL; //////////////////////////////////////////////////////////////////////////////// // 打開文件 StgOpenStorage( FILENAME, NULL, dwMode, NULL, 0, &pStgRoot ); //////////////////////////////////////////////////////////////////////////////// // 打開一個目錄 pStgRoot->OpenStorage( L"StgRoot", // 注意大小寫 NULL, dwMode, NULL, 0, &pStgSub ); //////////////////////////////////////////////////////////////////////////////// // 準備讀取數據 pStgSub->OpenStream( L"Stm", NULL, dwMode, 0, &pStream ); //////////////////////////////////////////////////////////////////////////////// // 讀取數據 const int nLen=255; // 準備讀入的長度 char strText[nLen]={0}; // 必須指定初始值,不然會顯示出亂碼,也能夠設爲 '\0' ULONG actRead; pStream->Read( strText, // 存放放入的數據的緩衝區 nLen, // 要讀入數據的長度,如不清楚能夠設爲較大的數 &actRead // 實際讀入的長度 ); //////////////////////////////////////////////////////////////////////////////// // 釋放資源 pStream->Release(); pStgSub->Release(); pStgRoot->Release(); //////////////////////////////////////////////////////////////////////////////// AfxMessageBox(strText); CString strMsg; strMsg.Format("指定讀入數據的長度:%d , 實際讀入數據長度:%ld",nLen,actRead); AfxMessageBox(strMsg); }