The following example creates an stream file inside an storage file.
' ########################################################################################
' Creates an stream file inside an storage file.
' Minimum operating system: Windows 2000.
' ########################################################################################
#COMPILE EXE
#DIM ALL
%USESTREAMWRAPPERS = 1
#INCLUDE ONCE "OLE2UTILS.INC"
' ========================================================================================
SUB TestCreateStorage
LOCAL hr AS LONG
LOCAL pStorage AS IStorage
LOCAL pStream AS IStream
LOCAL wszName AS STRING
wszName = UCODE$("MyStorage.stg")
hr = StgCreateStorageEx(STRPTR(wszName), %STGM_CREATE OR %STGM_DIRECT OR %STGM_SHARE_EXCLUSIVE OR %STGM_READWRITE, _
%STGFMT_STORAGE, 0, BYVAL %NULL, %NULL, $IID_IStorage, pStorage)
IF FAILED(hr) THEN
MSGBOX "StgCreateStorageEx failure: " & HEX$(hr)
EXIT SUB
END IF
wszName = UCODE$("MyStream")
hr = pStorage.CreateStream(STRPTR(wszName), _
%STGM_DIRECT OR %STGM_CREATE OR %STGM_READWRITE OR %STGM_SHARE_EXCLUSIVE, _
0, 0, pStream)
IF FAILED(hr) THEN
MSGBOX "IStorage.CreateStream failure"
EXIT SUB
END IF
IStream_WriteText pStream, "http://www.powerbasic.com/"
IStream_WriteText pStream, "José Roca - http://jose.it-berater.org/"
MSGBOX "Storage created"
pStream = NOTHING
pStorage = NOTHING
END SUB
' ========================================================================================
' ========================================================================================
SUB TestOpenStorage
LOCAL hr AS LONG
LOCAL pStorage AS IStorage
LOCAL pStream AS IStream
LOCAL wszName AS STRING
wszName = UCODE$("MyStorage.stg")
hr = StgOpenStorageEx(STRPTR(wszName), %STGM_DIRECT OR %STGM_SHARE_EXCLUSIVE OR %STGM_READWRITE, _
%STGFMT_STORAGE, 0, BYVAL %NULL, %NULL, $IID_IStorage, pStorage)
IF FAILED(hr) THEN
MSGBOX "StgOpenStorageEx failure: " & HEX$(hr)
EXIT SUB
END IF
wszName = UCODE$("MyStream")
hr = pStorage.OpenStream(STRPTR(wszName), %NULL, _
%STGM_DIRECT OR %STGM_READWRITE OR %STGM_SHARE_EXCLUSIVE, _
%NULL, pStream)
IF FAILED(hr) THEN
MSGBOX "IStorage,OpenStream failure: " & HEX$(hr)
EXIT SUB
END IF
IStream_SeekAtEndOfFile(pStream)
IStream_WriteText(pStream, "New line")
IStream_ResetSeekPosition(pStream)
MSGBOX IStream_ReadText(pStream, 26)
MSGBOX IStream_ReadText(pStream, 39)
MSGBOX IStream_ReadText(pStream, 10)
pStream = NOTHING
pStorage = NOTHING
END SUB
' ========================================================================================
' ========================================================================================
' Main
' ========================================================================================
FUNCTION PBMAIN
TestCreateStorage
TestOpenStorage
END FUNCTION
' ========================================================================================
The following version works with Windows 98:
' ########################################################################################
' Creates an stream file inside an storage file.
' ########################################################################################
#COMPILE EXE
#DIM ALL
%USESTREAMWRAPPERS = 1
#INCLUDE ONCE "OLE2UTILS.INC"
' ========================================================================================
SUB TestCreateStorage
LOCAL hr AS LONG
LOCAL pStorage AS IStorage
LOCAL pStream AS IStream
LOCAL wszName AS STRING
wszName = UCODE$("MyStorage.stg")
hr = StgCreateDocFile(STRPTR(wszName), _
%STGM_CREATE OR %STGM_DIRECT OR %STGM_SHARE_EXCLUSIVE OR %STGM_READWRITE, _
%NULL, pStorage)
IF FAILED(hr) THEN
MSGBOX "StgCreateDocFile failure: " & HEX$(hr)
EXIT SUB
END IF
wszName = UCODE$("MyStream")
hr = pStorage.CreateStream(STRPTR(wszName), _
%STGM_DIRECT OR %STGM_CREATE OR %STGM_READWRITE OR %STGM_SHARE_EXCLUSIVE, _
0, 0, pStream)
IF FAILED(hr) THEN
MSGBOX "IStorage_CreateStream failure"
EXIT SUB
END IF
IStream_WriteText pStream, "http://www.powerbasic.com/"
IStream_WriteText pStream, "José Roca - http://jose.it-berater.org/"
MSGBOX "Storage created"
pStream = NOTHING
pStorage = NOTHING
END SUB
' ========================================================================================
' ========================================================================================
SUB TestOpenStorage
LOCAL hr AS LONG
LOCAL pStorage AS IStorage
LOCAL pStream AS IStream
LOCAL wszName AS STRING
wszName = UCODE$("MyStorage.stg")
hr = StgOpenStorage(STRPTR(wszName), _
NOTHING, %STGM_DIRECT OR %STGM_SHARE_EXCLUSIVE OR %STGM_READWRITE, _
0, %NULL, pStorage)
IF FAILED(hr) THEN
MSGBOX "StgOpenStorage failure: " & HEX$(hr)
EXIT SUB
END IF
wszName = UCODE$("MyStream")
hr = pStorage.OpenStream(STRPTR(wszName), %NULL, _
%STGM_DIRECT OR %STGM_READWRITE OR %STGM_SHARE_EXCLUSIVE, _
%NULL, pStream)
IF FAILED(hr) THEN
MSGBOX "IStorage.OpenStream failure: " & HEX$(hr)
EXIT SUB
END IF
IStream_SeekAtEndOfFile(pStream)
IStream_WriteText(pStream, "New line")
IStream_ResetSeekPosition(pStream)
MSGBOX IStream_ReadText(pStream, 26)
MSGBOX IStream_ReadText(pStream, 39)
MSGBOX IStream_ReadText(pStream, 10)
pStream = NOTHING
pStorage = NOTHING
END SUB
' ========================================================================================
' ========================================================================================
' Main
' ========================================================================================
FUNCTION PBMAIN
TestCreateStorage
TestOpenStorage
END FUNCTION
' ========================================================================================