一時ファイル 
一時ファイルを利用したいときには OpenOffice.org API が提供してくれます。
ファイル 
com.sun.star.io.TempFile サービスをインスタンス化するだけで一時ファイルを利用可能になります。
このサービスを利用すると OOo API がツール - オプション - OpenOffice.org - パスで設定した一時ファイルディレクトリに自動的に一時ファイルを作成します。
Sub temporaryfile_1
oTempFile = CreateUnoService("com.sun.star.io.TempFile")
msgbox oTempFile.Uri
msgbox oTempFile.ResourceName
End Sub
Uri プロパティが作成された一時ファイルの url 形式でのパスを、ResourceName プロパティがシステム形式でのパスを保持しています。
そのほか、一時ファイルの読み書きには TempFile サービスの次のインターフェースが利用できます。
- com.sun.star.io.XInputStream
- com.sun.star.io.XOutputStream
- com.sun.star.io.XSeekable
- com.sun.star.io.XStream
- com.sun.star.io.XTruncate
この一時ファイルは RemoveFile プロパティがデフォルトで True に設定されているため、利用しない時間経過または OOo 終了時に削除されます。False に変更すると自動的に削除されなくなります。
ディレクトリ 
OOo が動作しているときにはいつもテンポラリディレクトリが作成されています。このディレクトリはコンフィグレーションに記載があり、実行ごとに変化します。
/org.openoffice.Office.Common/Internal/CurrentTempURL に URL 形式で記述されます。
複数の一時ファイルを利用するときには一時ディレクトリがほしくなります。
直接 OOo API から一時ディレクトリは提供されていませんが、上記 com.sun.star.io.TempFile サービスを利用して一時ディレクトリを利用できます。
TempFile サービスで作成される一時ファイルは一時的なディレクトリに含めた形で提供されます。このディレクトリは一時ファイルと同じときにまとめて削除されます。一時ファイル以外のファイルが存在してもまとめて削除してくれます。
たとえば、パス名は以下のようになっています。
uri paty: file:///C:/Users/user/AppData/Local/Temp/svihk.tmp/svihl.tmp
system path: C:\Users\user\AppData\Local\Temp\svihk.tmp\svihl.tmp
これらのパスからディレクトリ名の部分を取得して一時ディレクトリのパスとして利用します。
文字列処理やパス処理を行いディレクトリ名を取得します。環境に依存しないように URL からディレクトリパスを取得、システムパスに変換します。
ここでは OOo API を利用してディレクトリパスを取得してみます。
Sub tempdirectory_2
oTempFile = CreateUnoService("com.sun.star.io.TempFile")
sURI = oTempFile.Uri
oTransFormer = CreateUnoService("com.sun.star.util.URLTransformer")
Dim aURL As New com.sun.star.util.URL
aURL.Complete = sURI
oTransFormer.parseStrict(aURL)
sDirURL = aURL.Protocol & aURL.Path
msgbox sDirURL & chr(10) & ConvertFromURL(sDirURL)
End Sub