共用方式為


_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。如需詳細資訊,請參閱平台叫用範例

請參閱

參考

資料流 I/O

_getmbcp

malloc

_setmbcp

tmpfile

tmpfile_s