_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 が有効なディレクトリにあるファイル名で使用されているパス。str
生成された名前を保持し関数によって返される名前と同じポインター。これにより生成された名前を格納するのに便利です。
戻り値
これらの関数は生成される名前または NULL にエラーが発生した場合のポインターを返します。TMP_MAX よりもエラーは発生します (STDIO.H) tmpnam の呼び出しを参照してください _tempnam またはを使用して そこに複数の環境変数と dir のパラメーターで指定された無効なディレクトリ名です。
[!メモ]
静的な内部バッファーへの tmpnam の点と _wtmpnam 返されるポインター。フリー (R) はそれらのポインターを解放するために呼び出す必要があります。free は _tempnam と _wtempnam によって割り当てられたポインターのために呼び出す必要があります。
解説
これらの関数は現在存在しないファイルの名前を返します。tmpnam は現在の作業ディレクトリに一意の名前を返し_tempnam は現在の別のディレクトリの一意の名前を付けることができます。ファイル名がバックス ラッシュとパス情報などの \ fname21 アタッチされていない場合この説明は名前が現在の作業ディレクトリに対して有効であることを示します。
tmpnam についてはこの str で生成されたファイル名を保存できます。str が NULL の場合tmpnam は静的バッファーに結果を保持します。したがって後続の呼び出しはこの値を破棄します。tmpnam によって生成された名前はtmpnam への最初の呼び出しの後に基数 32 (.1-.vvu の連続する番号のプログラム生成されたファイル名とファイル拡張子から STDIO.H の TMP_MAX が 32,767 の場合)およびです。
_tempnam は次の規則によって選択されたディレクトリに一意のファイル名を生成します :
複数の環境変数が定義された有効なディレクトリ名に設定されている場合一意の名前はTMP で指定されたディレクトリに生成されます。
複数の環境変数が定義されていない場合はディレクトリの名前に設定されている場合_tempnam は一意の名前を生成するパスとして dir のパラメーターを使用します。
複数の環境変数が定義されていない場合またはおよび dir がないディレクトリの名前に設定されている場合 NULL またはディレクトリ名に設定されている場合_tempnam は一意の名前を生成するには現在の作業ディレクトリを使用します。現在複数 dir の両方がないディレクトリ名を指定した場合_tempnam の関数呼び出しは失敗します。
_tempnam によって返される名前が指定されたディレクトリに固有の名前を作成するに prefix 結合および連続する番号を連結したものです。_tempnam は拡張子のないファイル名を生成します。_tempnam はファイル名の領域を割り当てるために malloc を使用して ; プログラムでは不要になったこの領域を解放する必要があります。
_tempnam と tmpnam は必要に応じて自動的にマルチバイト文字列の引数を処理されるためマルチバイト文字シーケンスをオペレーティング システムから OEM コード ページに従って認識します。_wtempnam は のワイド文字バージョンです _tempnam; _wtempnam の引数と戻り値はワイド文字列です。_wtempnam と _tempnam の動作は、_wtempnam がマルチバイト文字列を扱わない点を除いて同じです。ワイド文字を扱う場合は、tmpnam ではなく _wtmpnam を使用します。_wtmpnam の場合、引数にはワイド文字列を指定します。また戻り値もワイド文字列です。_wtmpnam と tmpnam の動作は、_wtmpnam がマルチバイト文字列を扱わない点を除いて同じです。
_DEBUG と _CRTDBG_MAP_ALLOC が定義されている場合_tempnam と _wtempnam は _tempnam_dbg と _wtempnam_dbg の呼び出しに置き換えられます。
汎用テキスト ルーチンのマップ
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> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_tempnam.c
// compile with: /W3
// This program uses tmpnam to create a unique filename in the
// current working directory, then uses _tempnam to create
// a unique filename with a prefix of stq.
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
char* name1 = NULL;
char* name2 = 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);
}
同等の .NET Framework 関数
該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。