// Copyright 1997-1997 Microsoft Corporation. All Rights Reserved. #if _MSC_VER > 1000 #pragma once #endif #ifndef _FS_H_ #define _FS_H_ #include #include "msitstg.h" #ifdef ReleaseObjPtr #undef ReleaseObjPtr #endif #define ReleaseObjPtr(pObj) \ { \ if( pObj ) \ { \ pObj->Release(); \ pObj= NULL; \ } \ } // // Sub-File System // class CSubFileSystem { public: CSubFileSystem(class CFileSystem* pfs); ~CSubFileSystem(); HRESULT CreateSub(PCSTR pszPathName); HRESULT CreateUncompressedSub(PCSTR pszPathName); HRESULT OpenSub(PCSTR pszPathName, DWORD dwAccess = (STGM_READ | STGM_SHARE_DENY_WRITE)); ULONG WriteSub(const void* pData, int cb); ULONG SeekSub(int cb, int iOrigin); HRESULT CreateSystemFile(PCSTR pszPathName); HRESULT CreateUncompressedSystemFile(PCSTR pszPathName); HRESULT SetSize(unsigned uSize); HRESULT DeleteSub() ; inline HRESULT ReadSub(void* pData, ULONG cb, ULONG* pcbRead) { return m_pStream->Read(pData, cb, pcbRead); } inline ULONG GetUncompressedSize(void) { return SeekSub(0,2); } inline HRESULT Stat(STATSTG *pstatstg, DWORD grfStatFalg) { return m_pStream->Stat(pstatstg,grfStatFalg); } inline HRESULT CopyTo(IStream* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER* pcbWritten) { return m_pStream->CopyTo(pstm, cb, pcbRead, pcbWritten); } inline IStream * GetStream(void) { return m_pStream; } inline IStorage* GetITStorageDocObj(void) const { return m_pStorage; } private: class CFileSystem* m_pFS; IStorage* m_pStorage; IStream* m_pStream; char m_szPathName[MAX_PATH]; // Needed for delete. }; // // File System // class CFileSystem { friend class CSubFileSystem; public: CFileSystem(); ~CFileSystem(); HRESULT Init(void); HRESULT Create( PCSTR pszPathName ); HRESULT CreateUncompressed( PCSTR pszPathName ); HRESULT Open( PCSTR pszPathName, DWORD dwAccess = (STGM_READ | STGM_SHARE_DENY_WRITE)); HRESULT Compact(LPCSTR lpszFileName); HRESULT Close(void); inline HRESULT GetPathName( LPSTR pszPathName ) { strcpy(pszPathName, m_szPathName); return S_OK; } inline IITStorage* GetITStorageObj(void) const { return m_pITStorage; } inline IStorage* GetITStorageDocObj(void) const { return m_pStorage; } private: IITStorage* m_pITStorage; IStorage* m_pStorage; char m_szPathName[MAX_PATH]; }; #endif // _FS_H_