_tempnam, _wtempnam, tmpnam, _wtmpnam

Wygeneruj nazwy, których można użyć do tworzenia plików tymczasowych. Dostępne są bezpieczniejsze wersje niektórych z tych funkcji; zobacz tmpnam_s, _wtmpnam_s.

Składnia

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
);

Parametry

prefix
Ciąg, który jest poprzedzony nazwami zwracanych przez _tempnamelement .

dir
Ścieżka używana w nazwie pliku, jeśli nie ma zmiennej środowiskowej TMP lub jeśli TMP nie jest prawidłowym katalogiem.

str
Wskaźnik, który zawiera wygenerowaną nazwę, identyczną z nazwą zwracaną przez funkcję. Jest to wygodny sposób zapisywania wygenerowanej nazwy.

Wartość zwracana

Każda z tych funkcji zwraca wskaźnik do wygenerowanej nazwy lub NULL jeśli wystąpi błąd. Błąd może wystąpić, jeśli spróbujesz więcej niż TMP_MAX (zobacz TEMAT STDIO. H) wywołuje metodę tmpnam lub , jeśli używasz _tempnam i istnieje nieprawidłowa nazwa katalogu określona w TMP zmiennej środowiskowej i w parametrze dir .

Uwaga

Wskaźniki zwracane przez tmpnam i _wtmpnam wskazują wewnętrzne bufory statyczne. free nie należy wywoływać w celu cofnięcia przydziału tych wskaźników. free należy wywołać dla wskaźników przydzielonych przez _tempnam i _wtempnam.

Uwagi

Każda z tych funkcji zwraca nazwę pliku, który obecnie nie istnieje. tmpnam Zwraca unikatową nazwę w wyznaczonym katalogu tymczasowym systemu Windows zwróconym przez GetTempPathWpolecenie . _tempnam Generuje unikatową nazwę w katalogu innym niż wyznaczony. Gdy nazwa pliku jest poprzedzana ukośnikiem odwrotnym i nie ma informacji o ścieżce, takich jak \fname21, wskazuje, że nazwa jest prawidłowa dla bieżącego katalogu roboczego.

W przypadku tmpnamprogramu można przechowywać tę wygenerowaną nazwę pliku w pliku str. Jeśli str wartość to NULL, tmpnam spowoduje to pozostawienie wyniku w wewnętrznym buforze statycznym. W związku z tym wszelkie kolejne wywołania zniszczą tę wartość. Nazwa wygenerowana przez tmpnam program składa się z nazwy pliku wygenerowanego przez program i, po pierwszym wywołaniu metody tmpnam, rozszerzenie pliku sekwencyjnych numerów w bazie 32 (.1-.vvu, gdy TMP_MAX w STDIO. H to 32 767).

_tempnam Generuje unikatową nazwę pliku dla katalogu wybranego przez następujące reguły:

  • Jeśli zmienna środowiskowa TMP jest zdefiniowana i ustawiona na prawidłową nazwę katalogu, unikatowe nazwy plików są generowane dla katalogu określonego przez protokół TMP.

  • Jeśli zmienna środowiskowa TMP nie jest zdefiniowana lub jeśli jest ustawiona na nazwę katalogu, który nie istnieje, użyj parametru dir jako ścieżki, _tempnam dla której generuje unikatowe nazwy.

  • Jeśli zmienna środowiskowa TMP nie jest zdefiniowana lub jeśli jest ustawiona na nazwę katalogu, który nie istnieje, a jeśli dir jest NULL albo ustawiona na nazwę katalogu, który nie istnieje, _tempnam użyj bieżącego katalogu roboczego, aby wygenerować unikatowe nazwy. Obecnie, jeśli zarówno TMP, jak i dir określ nazwy katalogów, które nie istnieją, wywołanie funkcji _tempnam zakończy się niepowodzeniem.

Nazwa zwracana przez _tempnam element jest łączeniem prefix i sekwencyjną liczbą, która łączy się w celu utworzenia unikatowej nazwy pliku dla określonego katalogu. _tempnam Generuje nazwy plików, które nie mają rozszerzenia. _tempnam używa malloc do przydzielenia miejsca dla nazwy pliku; program jest odpowiedzialny za zwalnianie tego miejsca, gdy nie jest już potrzebne.

_tempnam i tmpnam automatycznie obsługują odpowiednio argumenty ciągu wielobajtowego, rozpoznając sekwencje znaków wielobajtowych zgodnie ze stroną kodową producenta OEM uzyskaną z systemu operacyjnego. _wtempnam jest wersją szerokoznakową ; _tempnamargumenty i wartość zwracana _wtempnam są ciągami o szerokim znaku. _wtempnam i _tempnam zachowują się identycznie, z tą różnicą, że _wtempnam nie obsługuje ciągów wielobajtowych znaków. _wtmpnam jest wersją szerokoznakową ; tmpnamargument i wartość zwracana _wtmpnam są ciągami o szerokim znaku. _wtmpnam i tmpnam zachowują się identycznie, z tą różnicą, że _wtmpnam nie obsługuje ciągów wielobajtowych znaków.

Jeśli _DEBUG i _CRTDBG_MAP_ALLOC są zdefiniowane, _tempnam i _wtempnam są zastępowane przez wywołania do _tempnam_dbg i _wtempnam_dbg.

Mapowania procedur tekstu ogólnego

Procedura TCHAR.H _UNICODE i _MBCS niezdefiniowane _MBCS Zdefiniowane _UNICODE Zdefiniowane
_ttmpnam tmpnam tmpnam _wtmpnam
_ttempnam _tempnam _tempnam _wtempnam

Wymagania

Procedura Wymagany nagłówek
_tempnam <stdio.h>
_wtempnam, _wtmpnam <stdio.h> lub <wchar.h>
tmpnam <stdio.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

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

Zobacz też

We/Wy strumienia
_getmbcp
malloc
_setmbcp
tmpfile
tmpfile_s