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

請參閱

參考

資料流 I/O

_getmbcp

malloc

_setmbcp

tmpfile

tmpfile_s