_tempnam
, _wtempnam
, tmpnam
, _wtmpnam
Geçici dosyalar oluşturmak için kullanabileceğiniz adlar oluşturun. Bu işlevlerden bazılarının daha güvenli sürümleri mevcuttur; bkz. tmpnam_s
, _wtmpnam_s
.
Sözdizimi
char *_tempnam(
const char *dir,
const char *prefix
);
wchar_t *_wtempnam(
const wchar_t *dir,
const wchar_t *prefix
);
char *tmpnam(
char *str
);
wchar_t *_wtmpnam(
wchar_t *str
);
Parametreler
prefix
tarafından _tempnam
döndürülen adlara eklenen dize.
dir
TMP ortam değişkeni yoksa veya TMP geçerli bir dizin değilse dosya adında kullanılan yol.
str
oluşturulan adı tutan işaretçi, işlev tarafından döndürülen adla aynı. Bu, oluşturulan adı kaydetmenin kullanışlı bir yoludur.
Dönüş değeri
Bu işlevlerin her biri, oluşturulan ada veya NULL
bir hata olduğunda bir işaretçi döndürür. Daha fazlasını TMP_MAX
denerseniz hata oluşabilir (bkz. STDIO. H) ile tmpnam
veya kullanıyorsanız _tempnam
ve ortam değişkeninde ve parametresinde TMP
belirtilen geçersiz bir dizin adı varsa çağrıları dir
.
Not
tarafından tmpnam
döndürülen işaretçiler ve _wtmpnam
iç statik arabelleklere işaret eder. free
bu işaretçileri serbest bırakmak için çağrılmamalıdır. free
ve _wtempnam
tarafından _tempnam
ayrılan işaretçiler için çağrılmalıdır.
Açıklamalar
Bu işlevlerin her biri, şu anda mevcut olmayan bir dosyanın adını döndürür. tmpnam
tarafından GetTempPathW
döndürülen belirtilen Windows geçici dizininde benzersiz bir ad döndürür. _tempnam
belirtilen ad dışında bir dizinde benzersiz bir ad oluşturur. Bir dosya adı ters eğik çizgiyle eklendiğinde ve gibi \fname21
yol bilgisi olmadığında, adın geçerli çalışma dizini için geçerli olduğunu gösterir.
için tmpnam
, oluşturulan bu dosya adını içinde str
depolayabilirsiniz. ise str
NULL
tmpnam
, sonucu iç statik arabellekte bırakır. Böylece sonraki çağrılar bu değeri yok eder. tarafından oluşturulan ad, program tarafından tmpnam
oluşturulan bir dosya adından ve ilk çağrısından tmpnam
sonra, STDIO'dayken TMP_MAX
32 tabanındaki (.1-.vvu) sıralı numaraların dosya uzantısından oluşur. H 32.767).
_tempnam
aşağıdaki kurallar tarafından seçilen bir dizin için benzersiz bir dosya adı oluşturur:
TMP ortam değişkeni tanımlanır ve geçerli bir dizin adı olarak ayarlanırsa, TMP tarafından belirtilen dizin için benzersiz dosya adları oluşturulur.
TMP ortam değişkeni tanımlanmamışsa veya var olmayan bir dizinin adına ayarlanmışsa,
_tempnam
benzersiz adlar oluşturduğu yol olarak parametresini kullanırdir
.TMP ortam değişkeni tanımlanmamışsa veya var olmayan bir dizinin adına ayarlanmışsa ve yoksa veya var olmayan bir dizinin adına ayarlanmışsa
dir
NULL
,_tempnam
benzersiz adlar oluşturmak için geçerli çalışma dizinini kullanır. Şu anda hem TMPdir
hem de mevcut olmayan dizin adlarını belirtirseniz, _tempnam işlev çağrısı başarısız olur.
tarafından _tempnam
döndürülen ad, belirtilen dizin için benzersiz bir prefix
dosya adı oluşturmak üzere birleştirilen ve sıralı bir sayıdır. _tempnam
uzantısı olmayan dosya adları oluşturur. _tempnam
dosya adı için alan ayırmak için kullanır malloc
; program artık gerekli olmadığında bu alanı boşaltmaktan sorumludur.
_tempnam
ve tmpnam
çok baytlı dize bağımsız değişkenlerini uygun şekilde otomatik olarak işleyerek, işletim sisteminden alınan OEM kod sayfasına göre çok baytlı karakter dizilerini tanıyın. _wtempnam
, öğesinin _tempnam
geniş karakterli bir sürümüdür; bağımsız değişkenleri ve dönüş değeri _wtempnam
geniş karakterli dizelerdir. _wtempnam
ve _tempnam
çok baytlı dizeleri işlememesi dışında _wtempnam
aynı şekilde davranır. _wtmpnam
, öğesinin tmpnam
geniş karakterli bir sürümüdür; bağımsız değişkeni ve dönüş değeri _wtmpnam
geniş karakterli dizelerdir. _wtmpnam
ve tmpnam
çok baytlı dizeleri işlememesi dışında _wtmpnam
aynı şekilde davranır.
ve tanımlanırsa _DEBUG
_tempnam
ve _wtempnam
ve çağrıları_wtempnam_dbg
_tempnam_dbg
ile değiştirilir._CRTDBG_MAP_ALLOC
Genel metin yordamı eşlemeleri
TCHAR.H yordamı | _UNICODE ve _MBCS tanımlanmadı |
_MBCS tanımlanan |
_UNICODE tanımlanan |
---|---|---|---|
_ttmpnam |
tmpnam |
tmpnam |
_wtmpnam |
_ttempnam |
_tempnam |
_tempnam |
_wtempnam |
Gereksinimler
Yordam | Gerekli başlık |
---|---|
_tempnam |
<stdio.h> |
_wtempnam , _wtmpnam |
<stdio.h> veya <wchar.h> |
tmpnam |
<stdio.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// crt_tempnam.c
// compile with: /W3
// This program uses tmpnam to create a unique filename in the
// temporary directory, and _tempname to create a unique filename
// in C:\\tmp.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char * name1 = NULL;
char * name2 = NULL;
char * name3 = NULL;
// Create a temporary filename for the current working directory:
if ((name1 = tmpnam(NULL)) != NULL) { // C4996
// Note: tmpnam is deprecated; consider using tmpnam_s instead
printf("%s is safe to use as a temporary file.\n", name1);
} else {
printf("Cannot create a unique filename\n");
}
// Create a temporary filename in temporary directory with the
// prefix "stq". The actual destination directory may vary
// depending on the state of the TMP environment variable and
// the global variable P_tmpdir.
if ((name2 = _tempnam("c:\\tmp", "stq")) != NULL) {
printf("%s is safe to use as a temporary file.\n", name2);
} else {
printf("Cannot create a unique filename\n");
}
// When name2 is no longer needed:
if (name2) {
free(name2);
}
// Unset TMP environment variable, then create a temporary filename in C:\tmp.
if (_putenv("TMP=") != 0) {
printf("Could not remove TMP environment variable.\n");
}
// With TMP unset, we'll use C:\tmp as the temporary directory.
// Create a temporary filename in C:\tmp with prefix "stq".
if ((name3 = _tempnam("c:\\tmp", "stq")) != NULL) {
printf("%s is safe to use as a temporary file.\n", name3);
}
else {
printf("Cannot create a unique filename\n");
}
// When name3 is no longer needed:
if (name3) {
free(name3);
}
return 0;
}
C:\Users\LocalUser\AppData\Local\Temp\sriw.0 is safe to use as a temporary file.
C:\Users\LocalUser\AppData\Local\Temp\stq2 is safe to use as a temporary file.
c:\tmp\stq3 is safe to use as a temporary file.