2023/12/10

Windows のテンポラリフォルダの取得

LotusScript でプログラムを作成していると PC 内にファイルを一時的に保存したくなることがあります。ノーツ的にはデータディレクトリ内に利用しやすいのですが、私はずぼらなので、ついつい削除し忘れて他のファイルと混ざり収拾がつかなくなりがちです。

こうならないよう一時的なファイルは、Windows のテンポラリフォルダに保存するべきだと思います。そこで、LotusScript からそのフォルダを取得する方法を紹介します。

さまざまな方法があるのですが、今回はいにしえの呪文(?)である Windows API を利用して実現します。


利用する API

Kernel32.dll の GetTempPathA という関数を利用します。Microsoft Learn によると次の順序で確認し、見つかった最初のパスを返します。詳細は、GetTempPathA 関数 (fileapi.h) を参照ください。

  1. TMP 環境変数で指定されたパス
  2. TEMP 環境変数で指定されたパス
  3. USERPROFILE 環境変数で指定されたパス
  4. Windows ディレクトリ


サンプルプログラム

テンポラリフォルダの取得はさまざまなシーンでの利用が想定できるので、スクリプトライブラリ lsWindows を新規作成します。将来、Windows に関係する関数を作成することがあれば、ここに追加したいと思います。

Option Declare
Declare Function xGetTempPath Lib "kernel32.dll" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Public Function GetWinTmpPath() As String
   Dim sPath As String
   Dim lStrLen As Long

   sPath = Space(255)
   lStrLen = xGetTempPath(255, sPath)

   GetWinTmpPath = Left(sPath, lStrLen)
End Function


作成した関数は、GetWinTmpPath() 関数で、戻り値は、テンポラリフォルダのパスです。結果をメッセージボックスで表示すると、次の通り最後に "\" が付加されています。


0 件のコメント:

コメントを投稿