Aracılığıyla paylaş


_mktemp, _wmktemp

Benzersiz bir dosya adı oluşturur. Bu işlevlerin daha güvenli sürümleri mevcuttur; bkz. _mktemp_s, _wmktemp_s.

Sözdizimi

char *_mktemp(
   char *nameTemplate
);
wchar_t *_wmktemp(
   wchar_t *nameTemplate
);
template <size_t size>
char *_mktemp(
   char (&nameTemplate)[size]
); // C++ only
template <size_t size>
wchar_t *_wmktemp(
   wchar_t (&nameTemplate)[size]
); // C++ only

Parametreler

nameTemplate
Dosya adı düzeni.

Dönüş değeri

Bu işlevlerin her biri, değiştirilen nameTemplate için bir işaretçi döndürür. İşlev, hatalı biçimlendirilmişse veya verilen nameTemplate adından başka benzersiz ad oluşturulamıyorsa nameTemplate döndürürNULL.

Açıklamalar

işlevi bağımsız _mktemp değişkenini nameTemplate değiştirerek benzersiz bir dosya adı oluşturur. _mktemp çalışma zamanı sistemi tarafından kullanılmakta olan çok baytlı kod sayfasına göre çok baytlı karakter dizilerini tanıyarak çok baytlı dize bağımsız değişkenlerini uygun şekilde otomatik olarak işler. _wmktemp , öğesinin _mktempgeniş karakterli bir sürümüdür; bağımsız değişkeni ve dönüş değeri _wmktemp geniş karakterli dizelerdir. _wmktemp ve _mktemp çok baytlı karakter dizelerini işlememesi dışında _wmktemp aynı şekilde davranır.

Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.

Genel metin yordamı eşlemeleri

Tchar.h yordamı _UNICODE ve _MBCS tanımlanmadı _MBCS Tanımlanan _UNICODE Tanımlanan
_tmktemp _mktemp _mktemp _wmktemp

nameTemplate bağımsız değişkeni, sağladığınız yeni dosya adının parçası olan ve her X tarafından sağlanan _mktempbir karakter için yer tutucu olan biçimindedirbaseXXXXXXbase. içindeki nameTemplate her yer tutucu karakteri büyük harf X olmalıdır. _mktemp sondaki ilk X'i korur base ve alfabetik bir karakterle değiştirir. _mktemp , sondaki X karakterlerini beş basamaklı bir değerle değiştirir. Bu değer, çağıran işlemi veya çok iş parçacıklı programlarda çağıran iş parçacığını tanımlayan benzersiz bir sayıdır.

için yapılan her başarılı çağrı _mktemp öğesini değiştirir nameTemplate. Aynı işlemden veya aynı bağımsız değişkene sahip iş parçacığından sonraki her çağrıda, _mktemp önceki çağrılarda tarafından _mktemp döndürülen adlarla nameTemplate eşleşen dosya adlarını denetler. Belirli bir ad için dosya yoksa, _mktemp bu adı döndürür. Daha önce döndürülen tüm adlar için dosyalar varsa, _mktemp daha önce döndürülen adda kullandığı alfabetik karakteri 'a' ile 'z' arasında sırasıyla sonraki kullanılabilir küçük harfle değiştirerek yeni bir ad oluşturur. Örneğin, şu durumdaysa base :

fn

ve tarafından _mktemp sağlanan beş basamaklı değer 12345'tir, döndürülen ilk ad:

fna12345

Dosya FNA12345 oluşturmak için bu ad kullanılıyorsa ve bu dosya hala mevcutsa, aynı işlemden veya aynı iş parçacığından basenameTemplate gelen bir çağrıda döndürülen sonraki ad şu şekildedir:

fnb12345

FNA12345 yoksa, döndürülen sonraki ad yeniden olur:

fna12345

_mktemp ve değerlerinin herhangi bir bileşimi basenameTemplate için en fazla 26 benzersiz dosya adı oluşturabilir. Bu nedenle, FNZ12345 bu örnekte kullanılan ve nameTemplate değerleri için base oluşturabileceğiniz son benzersiz dosya adıdır_mktemp.

Hata durumunda errno ayarlanır. Geçersiz bir biçime sahipse nameTemplate (örneğin, altı X karakterden az), errno olarak EINVALayarlanır. 26 olası dosya adının tümü zaten mevcut olduğundan benzersiz bir ad oluşturulamıyorsa _mktemp , _mktemp nameTemplate öğesini boş bir dize olarak ayarlar ve döndürür EEXIST.

C++ dilinde, bu işlevlerin daha yeni ve güvenli karşılıklarını çağıran şablon aşırı yüklemeleri vardır. Daha fazla bilgi için bkz . Güvenli şablon aşırı yüklemeleri.

Gereksinimler

Yordam Gerekli başlık
_mktemp <io.h>
_wmktemp <io.h> veya <wchar.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

// crt_mktemp.c
// compile with: /W3
/* The program uses _mktemp to create
* unique filenames. It opens each filename
* to ensure that the next name is unique.
*/

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

char *template = "fnXXXXXX";
char *result;
char names[27][9];

int main( void )
{
   int i;
   FILE *fp;

   for( i = 0; i < 27; i++ )
   {
      strcpy_s( names[i], sizeof( names[i] ), template );
      /* Attempt to find a unique filename: */
      result = _mktemp( names[i] );  // C4996
      // Note: _mktemp is deprecated; consider using _mktemp_s instead
      if( result == NULL )
      {
         printf( "Problem creating the template\n" );
         if (errno == EINVAL)
         {
             printf( "Bad parameter\n");
         }
         else if (errno == EEXIST)
         {
             printf( "Out of unique filenames\n");
         }
      }
      else
      {
         fopen_s( &fp, result, "w" );
         if( fp != NULL )
            printf( "Unique filename is %s\n", result );
         else
            printf( "Cannot open %s\n", result );
         fclose( fp );
      }
   }
}
Unique filename is fna03912
Unique filename is fnb03912
Unique filename is fnc03912
Unique filename is fnd03912
Unique filename is fne03912
Unique filename is fnf03912
Unique filename is fng03912
Unique filename is fnh03912
Unique filename is fni03912
Unique filename is fnj03912
Unique filename is fnk03912
Unique filename is fnl03912
Unique filename is fnm03912
Unique filename is fnn03912
Unique filename is fno03912
Unique filename is fnp03912
Unique filename is fnq03912
Unique filename is fnr03912
Unique filename is fns03912
Unique filename is fnt03912
Unique filename is fnu03912
Unique filename is fnv03912
Unique filename is fnw03912
Unique filename is fnx03912
Unique filename is fny03912
Unique filename is fnz03912
Problem creating the template.
Out of unique filenames.

Ayrıca bkz.

Dosya işleme
fopen, _wfopen
_getmbcp
_getpid
_open, _wopen
_setmbcp
_tempnam, _wtempnam, tmpnam, _wtmpnam
tmpfile