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