_tempnam, _wtempnam, tmpnam, _wtmpnam

生成可用于创建临时文件的名称。 其中一些的更安全版本功能可用; tmpnam_s, _wtmpnam_s参见。

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

参数

  • prefix
    将前面添加到名称的字符串。 _tempnam返回。

  • dir
    用于文件名的路径; 如果没有 TMP 环境变量,或者,如果 TMP 不是有效的内容。

  • str
    将保存生成的名称,并将函数返回的名称相同的指针。 这样可以方便地保存生成的名称。

返回值

,如果有错误,这些函数都返回一个指向该名称生成的或 NULL 。 失败发生,如果不 TMP_MAX 更尝试在 (请参见 STDIO.H) 调用与 tmpnam ,或者使用 _tempnam,并且在 dir 参数指定的则 TMP 环境变量和无效的目录名称。

备注

指针由 tmpnam 返回,并且 _wtmpnam 指向内部静态缓冲区。不应调用 释放这些指针。free 需要为 _tempnam 和 _wtempnam分配的指针调用。

备注

这些功能中的每一个返回当前不存在文件的名称。 tmpnam 返回名称仅在当前工作目录中除当前一个外,并且, _tempnam 可以生成目录中的一个唯一的名称。 请注意比在文件名的前面添加反斜杠,而无路径信息,如 \ fname21,则指示该名称为当前工作目录是有效的。

对于 tmpnam,可以在 str可以将此生成的文件名。 如果 str 是 NULL,则 tmpnam 在内部静态缓冲区以将结果保留。 这样的任何后续调用销毁此值。 tmpnam 生成的名称包含一个过程生成的文件名,,在第一次调用 tmpnam后,序号文件扩展名在基础 32 (.1-.vvu 的,那么,当在 STDIO.H 的 TMP_MAX 为 32,767) 时。

_tempnam 将生成以下规则的选定内容的唯一文件名:

  • 如果 TMP 环境变量定义并将设置为有效的目录名,唯一文件名为 TMP 指定的目录中生成。

  • 如果 TMP 环境变量未定义,或者设置为不存在的目录的名称, _tempnam 将使用 dir 参数作为它将生成唯一名称的路径。

  • 如果 TMP 环境变量未定义,或者设置为不存在的目录的名称,属性,并且,如果 dir 是 NULL 或设置为不存在的目录的名称, _tempnam 将使用当前工作目录中生成唯一的名称。 目前,,则 TMP 和 dir 指定一个不存在的目录的名称, _tempnam 函数调用将失败。

_tempnam 返回的名称将是 prefix 和序列号的串联,将创建所指定的目录的唯一的文件名。 _tempnam 生成没有扩展名的文件的名称。 _tempnam 使用 malloc 将文件名空格;,当不再需要时,程序传递给释放此空间负责。

_tempnam 和自动 tmpnam 处理多字节字符串参数根据需要,识别多字节字符序列根据操作系统获得的 OEM 代码页。 _wtempnam 是 _tempnam的宽字符版本;参数和返回 _wtempnam 的值是宽字符字符串。 _wtempnam 和 _tempnam 具有相同的行为,但 _wtempnam 不处理多字节字符字符串。 _wtmpnam 是 tmpnam的宽字符版本;参数和返回 _wtmpnam 的值是宽字符字符串。 _wtmpnam 和 tmpnam 具有相同的行为,但 _wtmpnam 不处理多字节字符字符串。

如果 _DEBUG 和 _CRTDBG_MAP_ALLOC 定义, _tempnam 和 _wtempnam 替换调用 _tempnam_dbg 和 _wtempnam_dbg

一般文本例程映射

TCHAR.H 实例

未定义的 _UNICODE _MBCS

定义的 _MBCS

定义的 _UNICODE

_ttmpnam

tmpnam

tmpnam

_wtmpnam

_ttempnam

_tempnam

_tempnam

_wtempnam

要求

实例

必需的头

_tempnam

stdio.h

_wtempnam, _wtmpnam

stdio.h 或 wchar.h

tmpnam

stdio.h

有关其他的兼容性信息,请参见中介绍的 兼容性

示例

// crt_tempnam.c
// compile with: /W3
// This program uses tmpnam to create a unique filename in the
// current working directory, then uses _tempnam to create 
// a unique filename with a prefix of stq. 

#include <stdio.h>
#include <stdlib.h>

int main( void )
{   
   char* name1 = NULL;
   char* name2 = 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);
     
}
        

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见 平台调用示例

请参见

参考

流I/O

_getmbcp

malloc

_setmbcp

tmpfile

tmpfile_s