ZipFileAccess のコード追っかけメモ

OpenOffice.org に含まれている ZipFileAccess UNO パッケージのメモ。

まず、ZipFileAccess のハンドラとなる Variant 変数を宣言する。

Dim zipFile As Variant

でもって、次に ZipFileAccess を引数にして、createUnoService を呼ぶ。

zipFile = createUnoService('com.sun.star.packages.zipZipFileAccess')

これで zipFile に UNO サービスを割り当てられた。
でもって、次に初期化。

zipFile.initialize(Array('ファイルパス'))

ここで一度 OpenOffice.org のソースを覗く。

この zipZipFileAccess のコードは、次のファイルで記述されている。

OOo_2.4.0_src_core\OOH680_m12\package\source\zippackage\zipfileaccess.cxx

コンストラクタは、

OZipFileAccess:OZipFileAccess( const uno:Reference< lang:XMultiServiceFactory >& xFactory )
:m_xFactory( xFactory )
,m_pZipFile( NULL )
,m_pListenersContainer( NULL )
,m_bDisposed( sal_False )
{
	if ( !xFactory.is() )
		throw uno:RuntimeException();
}

で、特に何もしていない。

initialize の定義は次の通り。

void SAL_CALL OZipFileAccess:initialize( const uno:Sequence< uno:Any >& aArguments )
	throw ( uno:Exception,n		uno:RuntimeException )

引数は Array なんだけれど、

	OSL_ENSURE( aArguments.getLength() == 1,"Too meny arguments are provided,only the first one will be used!\n" );

ということで、Array の1つ目のファイルパスだけが有効でした。

ちなみに、主な関数は次の通り。

Type getElementType()
initialize で指定したファイルの種類を返す
Bool hasElements()
圧縮ファイル内にファイルがあるかどうかを調べる
Sequence getElementNames()
圧縮されているファイルの一覧を取得する
XInputStream getByName(ファイル名)
指定のファイル名が含まれていればそのXInputStreamを返す