_mktemp_s、_wmktemp_s_mktemp_s, _wmktemp_s

一意のファイル名を作成します。Creates a unique file name. これらは、「CRT のセキュリティ機能」の説明にあるとおり、セキュリティが強化されたバージョンの _mktemp、_wmktemp です。These are versions of _mktemp, _wmktemp with security enhancements as described in Security Features in the CRT.

構文Syntax

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

パラメーターParameters

nameTemplatenameTemplate
ファイル名のパターン。File name pattern.

sizeInCharssizeInChars
シングル バイト文字バッファーのサイズ _mktemp_s; ワイド文字 _wmktemp_s、null 終端文字を含むです。Size of the buffer in single-byte characters in _mktemp_s; wide characters in _wmktemp_s, including the null terminator.

戻り値Return Value

これらの関数のどちらも、成功した場合は 0 を返し、エラーの場合はエラー コードを返します。Both of these functions return zero on success; an error code on failure.

エラー条件Error Conditions

nameTemplatenameTemplate sizeInCharssizeInChars 戻り値Return value 新しい値でnameTemplateNew value in nameTemplate
NULLNULL 任意any EINVALEINVAL NULLNULL
形式が正しくありません (「解説」を参照してください正しい形式のセクション)。Incorrect format (see Remarks section for correct format) 任意any EINVALEINVAL 空の文字列empty string
任意any X の数以下<= number of X's EINVALEINVAL 空の文字列empty string

上記のいずれかのエラー条件が発生すると、「パラメーターの検証」に説明されているように、無効なパラメーター ハンドラーが呼び出されます。If any of the above error conditions occurs, the invalid parameter handler is invoked, as described in Parameter Validation. 続けるには、実行が許可された場合errnoに設定されているEINVAL関数とEINVALします。If execution is allowed to continue, errno is set to EINVAL and the functions returns EINVAL.

RemarksRemarks

_Mktemp_s関数を変更して一意のファイル名を作成し、 nameTemplate引数、ように呼び出しの後、 nameTemplateポインターが指す文字列新しいファイル名を含むです。The _mktemp_s function creates a unique file name by modifying the nameTemplate argument, so that after the call, the nameTemplate pointer points to a string containing the new file name. _mktemp_sマルチバイト文字の文字列引数には、実行時のシステムによって現在使用中のマルチバイト コード ページに従ってマルチバイト文字シーケンスを認識するを必要に応じて、自動的に処理します。_mktemp_s automatically handles multibyte-character string arguments as appropriate, recognizing multibyte-character sequences according to the multibyte code page currently in use by the run-time system. _wmktemp_sのワイド文字バージョンは、 _mktemp_s; の引数 _wmktemp_sはワイド文字列です。_wmktemp_s is a wide-character version of _mktemp_s; the argument of _wmktemp_s is a wide-character string. _wmktemp_s_mktemp_sの動作は同じ場合は、点を除いて _wmktemp_sマルチバイト文字の文字列を処理しません。_wmktemp_s and _mktemp_s behave identically otherwise, except that _wmktemp_s does not handle multibyte-character strings.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

Tchar.h のルーチンTchar.h routine _UNICODE および _MBCS が未定義の場合_UNICODE and _MBCS not defined _MBCS が定義されている場合_MBCS defined _UNICODE が定義されている場合_UNICODE defined
_tmktemp_s_tmktemp_s _mktemp_s_mktemp_s _mktemp_s_mktemp_s _wmktemp_s_wmktemp_s

NameTemplate引数の形式baseXXXXXXここで、基本提供する新しいファイル名の一部である、各 X はによって指定される文字のプレース ホルダー _mktemp_sします。The nameTemplate argument has the form baseXXXXXX, where base is the part of the new file name that you supply and each X is a placeholder for a character supplied by _mktemp_s. 内の各プレース ホルダー文字nameTemplateは大文字の X をする必要があります _mktemp_s保持基本し、最初の後続の X を英字に置き換えます。Each placeholder character in nameTemplate must be an uppercase X. _mktemp_s preserves base and replaces the first trailing X with an alphabetic character. _mktemp_s末尾の次を置換する大文字の X を 5 桁の値です。 この値は、プロセス、またはマルチ スレッド プログラムの場合は、呼び出し元のスレッドには、呼び出し元を識別する一意の番号。_mktemp_s replaces the following trailing X's with a five-digit value; this value is a unique number identifying the calling process, or in multithreaded programs, the calling thread.

呼び出しが成功した _mktemp_s変更nameTemplateします。Each successful call to _mktemp_s modifies nameTemplate. 各後続の呼び出しと同じプロセスまたは同じスレッドでnameTemplate引数、 _mktemp_sによって返される名前と一致するファイル名に対してチェック _mktemp_s以前の呼び出し。In each subsequent call from the same process or thread with the same nameTemplate argument, _mktemp_s checks for file names that match names returned by _mktemp_s in previous calls. 指定した名前のファイルが存在しない場合 _mktemp_sその名前を返します。If no file exists for a given name, _mktemp_s returns that name. 名前、以前に返したすべてのファイルが存在する場合 _mktemp_s英字部分 'a' ~ 'z' の順序で、[次へ] の使用可能な小文字文字を置き換えることで、新しい名前を作成します。If files exist for all previously returned names, _mktemp_s creates a new name by replacing the alphabetic character it used in the previously returned name with the next available lowercase letter, in order, from 'a' through 'z'. たとえば場合、基本は。For example, if base is:

fnfn

によって提供される 5 桁の値と _mktemp_s返される最初の名前が 12345 の場合。and the five-digit value supplied by _mktemp_s is 12345, the first name returned is:

fna12345fna12345

この名前を使用してファイル FNA12345 を作成しており、このファイルが存在する同じプロセスまたはスレッドで、同じ呼び出しで、[次へ] の名前が返されます場合基本nameTemplateは。If this name is used to create file FNA12345 and this file still exists, the next name returned on a call from the same process or thread with the same base for nameTemplate is:

fnb12345fnb12345

FNA12345 が存在しない場合、次に返される名前はもう一度次のようになります。If FNA12345 does not exist, the next name returned is again:

fna12345fna12345

_mktemp_sの任意の組み合わせの 26 の一意のファイル名の最大値を作成できます基本nameTemplate値。_mktemp_s can create a maximum of 26 unique file names for any given combination of base and nameTemplate values. そのため、FNZ12345 は、最後の一意のファイル名 _mktemp_sを作成することができます、基本nameTemplateこの例で使用される値。Therefore, FNZ12345 is the last unique file name _mktemp_s can create for the base and nameTemplate values used in this example.

C++ では、これらの関数の使用はテンプレートのオーバーロードによって簡素化されます。オーバーロードでは、バッファー長を自動的に推論できる (サイズの引数を指定する必要がなくなる) だけでなく、古くてセキュリティが万全ではない関数を新しく安全な関数に自動的に置き換えることができます。In C++, using these functions is simplified by template overloads; the overloads can infer buffer length automatically (eliminating the need to specify a size argument) and they can automatically replace older, non-secure functions with their newer, secure counterparts. 詳細については、「 Secure Template Overloads」を参照してください。For more information, see Secure Template Overloads.

必要条件Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
_mktemp_s_mktemp_s <io.h><io.h>
_wmktemp_s_wmktemp_s <io.h> または <wchar.h><io.h> or <wchar.h>

互換性の詳細については、「 互換性」を参照してください。For more compatibility information, see Compatibility.

Example

// 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;
}

出力例Sample Output

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

関連項目See also

ファイル処理File Handling
fopen、_wfopenfopen, _wfopen
_getmbcp_getmbcp
_getpid_getpid
_open、_wopen_open, _wopen
_setmbcp_setmbcp
_tempnam、_wtempnam、tmpnam、_wtmpnam_tempnam, _wtempnam, tmpnam, _wtmpnam
tmpfile_stmpfile_s