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