Aracılığıyla paylaş


_mktemp, _wmktemp

Benzersiz bir dosya adı oluşturur. Bu işlevler daha güvenli sürümlerinin kullanılabilir olduğunu; see _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 şablondan oluşturulabilir.

Notlar

_mktemp İşlevini değiştirerek benzersiz bir dosya adı oluşturur template bağımsız değişkeni. _mktempçalışma zamanı sistemi tarafından kullanılmakta çok baytlı kod sayfasına göre çok baytlı karakter dizileri tanımayı çok baytlı karakter dizesi değişkenleri uygun şekilde otomatik olarak yönetir. _wmktempgeniş karakter sürümü _mktemp; bağımsız değişken ve dönüş değeri _wmktemp geniş karakter dizeleridir. _wmktempve _mktemp özdeş olarak dışında Aksi takdirde davranır _wmktemp çok baytlı karakter dizeleri işlemez.

Genel metin yordamı eşlemeleri

Tchar.h yordamına girildi

_UNICODE ve _mbcs tanımlı değil

Tanımlanan _mbcs

Tanımlanan _UNICODE

_tmktemp

_mktemp

_mktemp

_wmktemp

template Baðýmsýz deðiþkeni vardýr formu basexxxxxx, burada base girdiğiniz yeni bir dosya adı bir parçasıdır ve her x tarafından sağlanan bir karakter için bir yer tutucudur _mktemp. Her yer tutucu karakteri template büyük bir x olmalıdır. _mktempkorur base ve ilk sondaki x alfabetik bir karakterle değiştirir. _mktempAşağıdaki sondaki değiştirir X'lerin beş basamaklı bir değerle; Bu değer, arama sürecini veya birden çok iş parçacığı programları iş parçasıyla tanımlayan benzersiz bir sayıdır.

Başarılı her çağrı için _mktemp değiştirir template. Aynı işlem veya iş parçacığı ile aynı sonraki her çağrıda 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 çağrılarında. Verilen ad için hiçbir dosya varsa, _mktemp o adını döndürür. Tüm adları, daha önce verilen için dosyaları varsa _mktemp kullanılan önceden Döndürülmüş adı harfle sonraki kullanılabilir, 'a' ile sırada 'z' alfabetik karakterle değiştirerek yeni bir ad oluşturur. Örneğin, base ise:

fn

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

fna12345

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

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 bir dosya adı FNZ12345 olan _mktemp için oluşturabilir base ve template Bu örnekte kullanılan değer.

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

C++'da, bu işlevlerin daha yeni ve güvenli karşılıkları çağırmak şablon aşırı bu işlevleri vardır. Daha fazla bilgi için bkz. Güvenli şablon aşırı yükleme.

Gereksinimler

Yordamı

Gerekli başlık

_mktemp

<io.h>

_wmktemp

<io.h> veya <wchar.h>

Daha fazla uyumluluk bilgileri için bkz: Uyumluluk giriş.

Ö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

Yoktur. Standart c işlevi çağırmak için kullanmak PInvoke. Daha fazla bilgi için bkz: Platform Çağırma örnekleri.

Ayrıca bkz.

Başvuru

Dosya işleme

fopen, _wfopen

_getmbcp

_getpid

_open, _wopen

_setmbcp

_tempnam, _wtempnam, tmpnam, _wtmpnam

tmpfile