Aracılığıyla paylaş


_mktemp_s, _wmktemp_s

Benzersiz bir dosya adı oluşturur. Bunlar sürümleridir _mktemp, _wmktemp açıklandığı gibi güvenlik geliştirmeleri ile crt güvenlik özellikleri.

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

Parametreler

  • template
    Dosya adı deseni.

  • sizeInChars
    Tek baytlık karakter arabellek boyutunu _mktemp_s; geniş karakter _wmktemp_s, null Sonlandırıcı gibi.

Dönüş Değeri

Bu işlevlerin hem de başarı durumunda sıfır döndürür; hata durumunda bir hata kodu.

Hata koşulları

template

sizeInChars

Dönüş değeri

şablonda yeni değer

NULL

herhangi bir

EINVAL

NULL

Yanlış biçim (bkz: Remarks doğru biçimde bölüm)

herhangi bir

EINVAL

boş dize

herhangi bir

< = sayısı X'lerin

EINVAL

boş dize

Yukarıdaki hata durumlardan herhangi biri meydana gelirse, geçersiz parametre işleyicisi, açıklandığı şekilde çağrılır Parametre doğrulama. Yürütülmesine devam etmek için izin verilip verilmediğini errno ayarlamak EINVAL ve işlevleri döndürür EINVAL.

Notlar

_mktemp_s İşlevini değiştirerek benzersiz bir dosya adı oluşturur template bağımsız değişkeni, böylece çağrısının sonrasına template işaretçi işaret eden yeni bir dosya adı içeren bir dize. _mktemp_sç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. _wmktemp_sgeniş karakter sürümü _mktemp_s; baðýmsýz _wmktemp_s bir geniş karakter dizesidir. _wmktemp_sve _mktemp_s özdeş olarak dışında Aksi takdirde davranır _wmktemp_s ç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_s

_mktemp_s

_mktemp_s

_wmktemp_s

template Baðýmsýz deðiþkeni vardýr formu baseXXXXXX, 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_s. Her yer tutucu karakteri template büyük bir x olmalıdır. _mktemp_skorur base ve ilk sondaki x alfabetik bir karakterle değiştirir. _mktemp_sAş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_s 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_s tarafından döndürülen adları eşleşen dosya adları için çek _mktemp_s önceki çağrılarında. Verilen ad için hiçbir dosya varsa, _mktemp_s o adını döndürür. Tüm adları, daha önce verilen için dosyaları varsa _mktemp_s 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_s 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

_mktemp_sen ç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_s için oluşturabilir base ve template Bu örnekte kullanılan değer.

C++'da, bu işlevler tarafından şablon aşırı kolaylaştırılmıştır; aşırı arabellek uzunluğu otomatik olarak gerçekleştirip (size baðýmsýz deðiþkeni belirtmek gereğini ortadan kaldırır) ve bunlar otomatik olarak yeni, güvenli karşılıkları ile eski, güvenli olmayan işlevler değiştirebilirsiniz. Daha fazla bilgi için bkz. Güvenli şablon aşırı yükleme.

Gereksinimler

Yordamı

Gerekli başlık

_mktemp_s

<io.h>

_wmktemp_s

<io.h> veya <wchar.h>

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

Örnek

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

Örnek Çıktı

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

.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_s