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