_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 的指標。 如果您想要更多具有 tmpnam 的 TMP_MAX(參閱 STDIO.H) 呼叫或是如果您使用 _tempnam 且在 TMP 環境變數中及 dir 中有指定無效的目錄名稱,可能會發生失敗。
注意事項 |
---|
指標是由 tmpnam 和 _wtmpnam 傳回至內部靜態緩衝區。不應該呼叫可用 取消這些指標。free 必須為 _tempnam 和 _wtempnam配置的指標來呼叫。 |
備註
這些函式都會傳回目前不存在的檔名。 tmpnam 傳回在工作目錄唯一名稱且 _tempnam 讓您在目錄中產生不同於目前的唯一名稱。 請注意,會在檔名之前加上反斜線且沒有路徑資訊,例如\ fname21,這表示這名稱在目前工作目錄是有效的。
如果是 tmpnam,則可在 str 中儲存這個產生的檔案名稱。 如果 str 是 NULL,那麼 tmpnam 將結果留在內部靜態緩衝區。 因此所有後續的呼叫會摧毀此值。 tmpnam 產生的檔名包含程式產生的檔案名稱,而且,在第一次呼叫 tmpnam 之後,基底為 32 的副檔名序號為 (.1-.1vvu,當 STDIO.H 的 TMP_MAX 是 32,767)。
_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。如需詳細資訊,請參閱平台叫用範例。