_mktemp, _wmktemp

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

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

Parametreler

  • template
    Dosya adı deseni.

Dönüş Değeri

Bu işlevlerden her biri, değiştirilen şablona bir işaretçi döndürür.İşlev verir NULL , template yanlış biçimlendirilmiş veya daha fazla benzersiz adlar verilen şablonu oluşturulabilir.

Notlar

_mktemp İşlevini değiştirerek benzersiz bir dosya adı oluşturur template bağımsız değişkeni._mktempçok baytlı karakter dizileri çok baytlı kod sayfası şu anda kullanımda göre çalışma zamanı sistemi tarafından tanınması çok baytlı karakter dizesi bağımsız değişkenleri uygun şekilde otomatik olarak yönetir._wmktempbir geniş karakter sürümü _mktemp; YAZMAÇ değeri _wmktemp geniş karakter dizeleridir._wmktempve _mktemp aynı şekilde Aksi takdirde, dışında davranır _wmktemp çok baytlı karakter dizeleri işlemez.

Genel Metin Yordam Eşleşmeleri

Tchar.h yordamı

_UNICODE ve _MBCS tanımlanmaz

_MBCS tanımlanmış

_UNICODE tanımlanmış

_tmktemp

_mktemp

_mktemp

_wmktemp

template Baðýmsýz deðiþkeni vardýr formu baseXXXXXX, burada base her X tarafından sağlanan bir karakter için bir yer tutucudur ve sağladığınız yeni dosya adının bir parçası _mktemp.Her yer tutucu karakteri template büyük bir X olmalıdır._mktempkorur base ve ilk sonunda X alfabetik bir karakterle değiştirir._mktempşu sondaki değiştirir X'lerin beş basamaklı bir değerle; Bu işlem, veya çok iş parçacıklı programlar çağıran iş parçacığının arama tanımlayan benzersiz bir numara değerdir.

Her başarılı çağrı _mktemp değiştirir template.Sonraki her çağrıda aynı işlem veya iş parçacığı ile aynı template bağımsız değişkeni, _mktemp tarafından döndürülen adları eşleşen dosya adları için çek _mktemp önceki aramaların içinde.Verilen ad için hiçbir dosya varsa, _mktemp bu adı verir.Tüm adları, önceden döndürülen için dosya varsa _mktemp kullanılan önceden döndürülmüş adı harfle sonraki kullanılabilir, 'a' ile 'z' ile sırada alfabetik karakterle değiştirerek yeni bir ad oluşturur.Örneğin, base olur:

fn

ve tarafından sağlanan beş basamaklı değer _mktemp 12345, verilen ad:

fna12345

Bu ad, FNA12345 dosyası oluşturmak için kullanılır ve bu dosyayı hala, aynı işlem veya iş parçacığı ile aynı bir çağrıda sonraki adı verilen varsa base için template olur:

fnb12345

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

fna12345

_mktempen çok 26 benzersiz dosya adları için temel ve şablon değerleri verilen herhangi bir birleşimi oluşturabilirsiniz.Bu nedenle, son benzersiz dosya adı FNZ12345 olan _mktemp oluşturmak için base ve template Bu örnekte kullanılan değerler.

Başarısız olduğunda, errno ayarlanır.Yoksa template geçersiz bir biçime sahip (örneğin, 6 daha az X'lerin), errno ayarlamak EINVAL.Yoksa _mktemp 26 tüm olası dosya adları zaten var olduğundan, benzersiz bir ad oluşturamıyor _mktemp boş bir dize için şablonu tanımlar ve verir EEXIST.

C++ dilinde, bu işlevlerin daha yeni ve güvenli karşıtlarını başlatan ş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 Giriş altındaki Uyumluluk bölümüne bakın.

Ö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 );
      }
   }
}
  

.NET Framework Eşdeğeri

Uygulanamaz. Standart C işlevini çağırmak için PInvoke kullanın. Daha fazla bilgi için bkz. Platform Çağırma Örnekleri.

Ayrıca bkz.

Başvuru

Dosya İşleme

fopen, _wfopen

_getmbcp

_getpid

_open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile