_tempnam、 _wtempnam、 tmpnam、 _wtmpnam
產生您可以用來建立暫存檔名稱。 這些函式的一部分的更安全版本是可使用; see 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參數。
注意事項 |
---|
所傳回的指標tmpnam和_wtmpnam指到內部的靜態緩衝區。免費不應該呼叫解除這些指標排序。free需要被呼叫的指標所配置的_tempnam和_wtempnam。 |
備註
每個函式會傳回目前不存在的檔案名稱。 tmpnam傳回在目前的工作目錄中是唯一的名稱和_tempnam可讓您產生唯一的名稱,而非目前目錄中。 請注意,當檔案名稱會附加以反斜線和沒有路徑資訊,例如 \fname21,表示該名稱是正確的目前工作目錄。
對於tmpnam,您可以儲存在這個產生的檔案名稱str。 如果str是NULL,然後tmpnam將結果留在內部的靜態緩衝區中。 因此任何後續呼叫會消滅這個值。 所產生的名稱tmpnam包含非程式所產生的檔名,並在第一次呼叫後tmpnam,副檔名為連續的數字,在基底 32 (.1-.vvu 時TMP_MAX STDIO 中。H 是 32767)。
_tempnam就會產生唯一的檔名,根據下列規則所選的目錄:
如果 TMP 環境變數是定義,且設定為有效的目錄名稱,TMP 所指定的目錄將會產生唯一的檔名。
如果未定義 TMP 環境變數,或是設定為 [不存在,目錄名稱_tempnam會使用dir參數,它會為其產生唯一的名稱的路徑。
如果未定義 TMP 環境變數或如果設定為 [不存在,目錄的名稱,如果dir可能是NULL設定為 [不存在,目錄的名稱或_tempnam會使用目前的工作目錄,以產生唯一的名稱。 目前,如果這兩個 TMP 和dir指定名稱的目錄不存在, _tempnam函式呼叫會失敗。
傳回名稱_tempnam將會由串連而成prefix和連續編號,相結合,以建立唯一的檔名對指定的目錄。 _tempnam會產生有無副檔名的檔名。 _tempnam使用 malloc 來配置空間的檔案名稱。 此程式會負責不再需要時釋放此空間。
_tempnam與tmpnam自動處理多位元組字元字串引數視需要辨識多位元組字元序列的 OEM 字碼頁來取得與作業系統。 _wtempnam寬字元版本的_tempnam。 引數和傳回值的_wtempnam是寬字元字串。 _wtempnam與_tempnam運作方式完全相同,除了_wtempnam不處理多位元組字元字串。 _wtmpnam寬字元版本的tmpnam。 引數和傳回值的_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> |
其他的相容性資訊,請參閱相容性在簡介中。
範例
// 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。 如需詳細資訊,請參閱平台叫用範例。