_tempnam
, _wtempnam
, tmpnam
, _wtmpnam
一時ファイルの作成に使用できる名前を生成します。 これらの関数の一部のより安全なバージョンを利用できます。を参照してくださいtmpnam_s
。 _wtmpnam_s
構文
char *_tempnam(
const char *dir,
const char *prefix
);
wchar_t *_wtempnam(
const wchar_t *dir,
const wchar_t *prefix
);
char *tmpnam(
char *str
);
wchar_t *_wtmpnam(
wchar_t *str
);
パラメーター
prefix
によって返される名前の前に付加される _tempnam
文字列。
dir
TMP 環境変数がない場合、または TMP が有効なディレクトリでない場合に、ファイル名で使用されるパス。
str
生成された名前を保持するポインター。関数によって返される名前と同じです。 生成された名前を保存する便利な方法です。
戻り値
これらの各関数は、生成された名前へのポインター、または NULL
エラーが発生した場合に、ポインターを返します。 エラーが発生する可能性があります TMP_MAX
(STDIO を参照してください。H) 環境変数とパラメーターに tmpnam
無効なディレクトリ名が指定されている場合、または使用 _tempnam
する TMP
場合に呼び出 dir
します。
Note
tmpnam
と _wtmpnam
によって返されるポインターは、内部の静的バッファーを指します。 free
これらのポインターの割り当てを解除するために呼び出す必要はありません。 _tempnam
および _wtempnam
によって割り当てられたポインターに対して、free
を呼び出す必要があります。
解説
これらの各関数は、現在存在しないファイルの名前を返します。 tmpnam
は、返される指定された Windows 一時ディレクトリ内で一意の名前を GetTempPathW
返します。 _tempnam
は、指定されたディレクトリ以外のディレクトリに一意の名前を生成します。 ファイル名の先頭に円記号が付いていて、パス情報がない場合は、 \fname21
現在の作業ディレクトリに対して名前が有効であることを示します。
tmpnam
については、この生成されたファイル名を str
で格納することができます。 str
が NULL
の場合、tmpnam
は内部の静的バッファーに結果を残します。 したがって後続の呼び出しは、この値を破棄します。 tmpnam
によって生成された名前を構成しているのは、プログラムで生成されたファイル名と、tmpnam
への最初の呼び出しの後は base 32 で連番のファイル拡張子 (STDIO.H 内の TMP_MAX
が 32,767 の場合、.1-.vvu) です。
_tempnam
は、次の規則によって選択されたディレクトリの一意のファイル名を生成します。
TMP 環境変数が定義され、有効なディレクトリ名に設定されている場合、TMP で指定されたディレクトリに対して一意のファイル名が生成されます。
TMP 環境変数が定義されていない場合、または存在しないディレクトリの名前に設定されている場合は、
_tempnam
一意の名前を生成するパスとしてパラメーターを使用dir
します。TMP 環境変数が定義されていない場合、または存在しないディレクトリの名前に設定されている場合、または存在しないディレクトリの名前に設定されている場合
dir
はNULL
、_tempnam
現在の作業ディレクトリを使用して一意の名前を生成します。 現時点では、TMP とdir
存在しないディレクトリの名前の両方を指定すると、 _tempnam 関数呼び出しは失敗します。
返される _tempnam
名前は、連結 prefix
された連番であり、指定したディレクトリの一意のファイル名を作成するために結合されます。 _tempnam
は、拡張機能を持たないファイル名を生成します。 _tempnam
はファイル名のスペースを割り当てるために使用 malloc
します。不要になった場合、プログラムはこのスペースを解放する役割を担います。
_tempnam
および tmpnam
は、オペレーティング システムから取得した OEM コード ページに従ってマルチバイト文字シーケンスを認識し、マルチバイト文字列の引数を適切な方法で自動的に処理します。 ワイド文字を扱う場合は、_tempnam
ではなく _wtempnam
を使用します。_wtempnam
の場合、引数にはワイド文字列を指定します。また戻り値もワイド文字列です。 _wtempnam
がマルチバイト文字列を処理しない点を除き、_wtempnam
と _tempnam
の動作は同じです。 ワイド文字を扱う場合は、_wtmpnam
ではなく tmpnam
を使用します。_wtmpnam
の場合、引数にはワイド文字列を指定します。また戻り値もワイド文字列です。 _wtmpnam
がマルチバイト文字列を処理しない点を除き、_wtmpnam
と tmpnam
の動作は同じです。
定義されている場合_DEBUG
、 _tempnam
_CRTDBG_MAP_ALLOC
および呼び出_wtempnam_dbg
_tempnam_dbg
し_wtempnam
に置き換えられます。
汎用テキスト ルーチンのマップ
TCHAR.H のルーチン | _UNICODE と _MBCS が定義されていない |
_MBCS が定義されている |
_UNICODE が定義されている |
---|---|---|---|
_ttmpnam |
tmpnam |
tmpnam |
_wtmpnam |
_ttempnam |
_tempnam |
_tempnam |
_wtempnam |
必要条件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
_tempnam |
<stdio.h> |
_wtempnam , _wtmpnam |
<stdio.h> または <wchar.h> |
tmpnam |
<stdio.h> |
互換性の詳細については、「 Compatibility」を参照してください。
例
// crt_tempnam.c
// compile with: /W3
// This program uses tmpnam to create a unique filename in the
// temporary directory, and _tempname to create a unique filename
// in C:\\tmp.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char * name1 = NULL;
char * name2 = NULL;
char * name3 = NULL;
// Create a temporary filename for the current working directory:
if ((name1 = tmpnam(NULL)) != NULL) { // C4996
// Note: tmpnam is deprecated; consider using tmpnam_s instead
printf("%s is safe to use as a temporary file.\n", name1);
} else {
printf("Cannot create a unique filename\n");
}
// Create a temporary filename in temporary directory with the
// prefix "stq". The actual destination directory may vary
// depending on the state of the TMP environment variable and
// the global variable P_tmpdir.
if ((name2 = _tempnam("c:\\tmp", "stq")) != NULL) {
printf("%s is safe to use as a temporary file.\n", name2);
} else {
printf("Cannot create a unique filename\n");
}
// When name2 is no longer needed:
if (name2) {
free(name2);
}
// Unset TMP environment variable, then create a temporary filename in C:\tmp.
if (_putenv("TMP=") != 0) {
printf("Could not remove TMP environment variable.\n");
}
// With TMP unset, we'll use C:\tmp as the temporary directory.
// Create a temporary filename in C:\tmp with prefix "stq".
if ((name3 = _tempnam("c:\\tmp", "stq")) != NULL) {
printf("%s is safe to use as a temporary file.\n", name3);
}
else {
printf("Cannot create a unique filename\n");
}
// When name3 is no longer needed:
if (name3) {
free(name3);
}
return 0;
}
C:\Users\LocalUser\AppData\Local\Temp\sriw.0 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\stq2 is safe to use as a temporary file.
c:\tmp\stq3 is safe to use as a temporary file.
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示