_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。有关更多信息,请参见 平台调用示例。