共用方式為


_mktemp_s _wmktemp_s

建立唯一的檔名。 這些是舊版_mktemp _wmktemp中所述的安全性增強功能與安全性功能,則在 CRT 中

errno_t _mktemp_s(
   char *template,
   size_t sizeInChars
);
errno_t _wmktemp_s(
   wchar_t *template,
   size_t sizeInChars
);
template <size_t size>
errno_t _mktemp_s(
   char (&template)[size]
); // C++ only
template <size_t size>
errno_t _wmktemp_s(
   wchar_t (&template)[size]
); // C++ only

參數

  • template
    檔名模式。

  • sizeInChars
    緩衝區的大小以單位元組字元,在_mktemp_s。 在寬字元_wmktemp_s,其中包含 null 結束字元。

傳回值

兩種函式傳回零都成功。 錯誤碼錯誤所致。

錯誤狀況

template

sizeInChars

傳回值

在範本中的新值

NULL

任何

EINVAL

NULL

不正確的格式 (請參閱Remarks一節,取得正確的格式)

任何

EINVAL

空字串

任何

< = X

EINVAL

空字串

如果任何上述的錯誤狀況發生時,不正確的參數處理常式會叫用,如所述參數驗證。 如果要繼續,請允許執行errno設定為 [ EINVAL和函式會傳回EINVAL。

備註

_mktemp_s函式修改來建立唯一的檔名template引數,以便在呼叫之後, template指標指向已包含新的檔案名稱的字串。 _mktemp_s會自動處理多位元組字元字串引數視需要執行階段系統所辨識多位元組字元順序,根據目前使用中的多位元組字碼頁。 _wmktemp_s寬字元版本的_mktemp_s。 引數的_wmktemp_s是寬字元字串。 _wmktemp_s與_mktemp_s運作方式完全相同的話,除了_wmktemp_s不處理多位元組字元字串。

泛用文字常式對應

Tchar.h 常式

_Unicode 之後,未定義的 _MBCS

定義的 _MBCS

定義 _unicode 之後

_tmktemp_s

_mktemp_s

_mktemp_s

_wmktemp_s

template引數的表單baseXXXXXX,其中base是您提供的新檔案名稱的一部份,並且每個 x 是所提供的一個字元的預留位置_mktemp_s。 在每個預留位置字元template必須是大寫的 X。 _mktemp_s保留base ,並以英數字元取代第一個字尾的 X。 _mktemp_s會取代下列的句尾 x 's 與五位數的值。 這個值是唯一的數字,用來識別處理序,或在多執行緒程式中,呼叫的執行緒呼叫。

每一次成功呼叫_mktemp_s修改template。 每個後續的呼叫,從相同的程序或具有相同的執行緒中template引數, _mktemp_s檢查與所傳回的名稱相符的檔名_mktemp_s在之前呼叫。 若有指定名稱,沒有檔案_mktemp_s會傳回該名稱。 如果檔案存在,所有先前傳回的名稱, _mktemp_s來取代的字母的字元,它使用於先前傳回的檔案名稱與下一步可以使用小寫字母,依序從 'a' 到 'z' 中建立新的名稱。 比方說,如果base是:

fn

和五個位數的值所提供的_mktemp_s為 12345,傳回的第一個名稱為:

fna12345

如果這個名稱用來建立 FNA12345 檔案,而這個檔案是否仍然存在下, 一個名稱相同的處理程序或具有相同的執行緒所傳回的呼叫base的template是:

fnb12345

如果 FNA12345 不存在,傳回的下一個名稱為一次:

fna12345

_mktemp_s可以建立最多 26 的唯一檔名,對於任何指定基底和值的組合範本。 因此,FNZ12345 是最後一個唯一的檔名_mktemp_s可以為建立base和template用在這個範例中的值。

在 C++ 中,使用這些函式已經過簡化的樣板的多載 ; 多載可以自動推斷緩衝區長度 (而不必指定 size 引數),它們可以自動取代較舊的、 不安全的函式與其較新的、 安全的對應項目。 如需詳細資訊,請參閱 安全範本多載

需求

常式

所需的標頭

_mktemp_s

<io.h>

_wmktemp_s

<io.h> 或者 <wchar.h>

如需相容性資訊,請參閱相容性在簡介中。

範例

// crt_mktemp_s.cpp
/* The program uses _mktemp to create
 * five unique filenames. It opens each filename
 * to ensure that the next name is unique.
 */

#include <io.h>
#include <string.h>
#include <stdio.h>

char *fnTemplate = "fnXXXXXX";
char names[5][9];

int main()
{
   int i, err, sizeInChars;
   FILE *fp;

   for( i = 0; i < 5; i++ )
   {
      strcpy_s( names[i], sizeof(names[i]), fnTemplate );
      /* Get the size of the string and add one for the null terminator.*/
      sizeInChars = strnlen(names[i], 9) + 1;
      /* Attempt to find a unique filename: */
      err = _mktemp_s( names[i], sizeInChars );
      if( err != 0 )
         printf( "Problem creating the template" );
      else
      {
         if( fopen_s( &fp, names[i], "w" ) == 0 )
            printf( "Unique filename is %s\n", names[i] );
         else
            printf( "Cannot open %s\n", names[i] );
         fclose( fp );
      }
   }

   return 0;
}

範例輸出

Unique filename is fna03188
Unique filename is fnb03188
Unique filename is fnc03188
Unique filename is fnd03188
Unique filename is fne03188

.NET Framework 對等用法

不適用。 若要呼叫標準的 c 函式,使用PInvoke。 如需詳細資訊,請參閱平台叫用範例

請參閱

參考

檔案處理

fopen _wfopen

_getmbcp

_getpid

_open _wopen

_setmbcp

_tempnam、 _wtempnam、 tmpnam、 _wtmpnam

tmpfile_s