_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,并在TMP 环境变量和dir 参数中指定无效的目录名称。
备注
指针由 tmpnam 和 _wtmpnam 点返回到内部静态缓冲区。不应当调用free 释放这些指针。需要调用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 不处理多字节字符字符串。 _wsetlocale_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。有关更多信息,请参见平台调用示例。