GetTempFileName 一時ファイル名の取得

Cの宣言:

UINT GetTempFileName(
	LPCTSTR DirName,
	LPCTSTR Prefix,
	UINT Unique,
	LPTSTR TempFile);

VBの宣言:

Declare Function GetTempFileName Lib "kernel32" Alias "GetTempFileNameA" ( _
	ByVal DirName As String, _
	ByVal Prefix As String, _
	ByVal Unique As Long, _
	ByVal TempFile As String) As Long

説明:

DirNameで指定されたディレクトリにユニークな名前を持つ、空の一時ファイルを作成する。一時ファイルは、zPrefixで指定された文字列に、ユニークになるようにシステムが生成する最大4桁の16進数値を加えた、拡張子が“.tmp”というファイル名になる。ただし、Prefixの文字列長が4文字以上の場合、先頭の3文字のみが有効となる。

カレントディレクトリに一時ファイルを作成するには、DirNameにGetCurrentDirectoryで取得したパスを与えるか、文字列“.”を与える。DirNameがNULLであったり、長さ0の文字列である場合、関数の実行は失敗する。

通常Uniqueには0を指定する。特別な場合としてUniqueに1以上の値を与えた場合、システムが生成する16進数値の代わりにUniqueの値がファイル名構成時に用いられる。ただし、この時には一時ファイルは作成されない。

作成された一時ファイルがシステムによって自動的に削除されることはない。アプリケーションは、GetTempFileNameによって一時ファイルを作成したら、必ず自分自身でこれを削除しなければならない。

引数の意味は、以下の通り。
DirName (IN) 一時ファイルを作成するディレクトリ
Prefix (IN) 一時ファイル名の先頭の文字列。4文字以上は切り捨てられる。
Unique (IN) 通常0を指定する。1以上を指定した場合、システムはファイル名
の後続に付与する16進数値としてUniqueを用い、一時ファイル名を返す。ただし、この場合一時ファイルは作成されない。
TempFile (OUT) 作成された一時ファイル名を格納するバッファ。

戻り値は、一時ファイル名の末尾に付与された16進数値である。関数の実行に失敗したならば、0が返される。

Cのサンプル:

void DoTempFile()
{
	char buf[MAX_PATH];

	GetTempFileName(
		"d:\\ntint\\apidoc",
		"aog",
		0,
		buf);
	printf("一時ファイル %s を作成しました\n", buf);

	DeleteFile(buf);
	printf("一時ファイル %s を削除しました\n", buf);
}

VBのサンプル:

' 一時ファイルの作成
Private Sub DoTempFile()
	Dim Buf As String * MAX_PATH
	Dim TempFile As String

	'一時ファイルの作成
	GetTempFileName "c:\temp", "tst", 0, Buf

	'作成したファイル名の表示
	TempFile = Left(Buf, InStr(Buf, vbNullChar) - 1)
	MsgBox "一時ファイル" & TempFile & "を作成しました"

	'作成したファイルの削除
	DeleteFile TempFile

	'削除メッセージ表示
	MsgBox "一時ファイル" & TempFile & "を削除しました"
End Sub

(original text:1998/12/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。