_makepath、_wmakepath

创建组件的路径名。 提供这些函数的更多安全版本;请参见 _makepath_s、_wmakepath_s

void _makepath(
   char *path,
   const char *drive,
   const char *dir,
   const char *fname,
   const char *ext 
);
void _wmakepath(
   wchar_t *path,
   const wchar_t *drive,
   const wchar_t *dir,
   const wchar_t *fname,
   const wchar_t *ext 
);

参数

  • path
    完整路径缓冲区。

  • drive
    包含与预期驱动器和一个选项尾部冒号对应的字母(A,B 等) 。 如果它丢失,_makepath 在复合路径自动插入冒号。 如果 drive 是NULL 或指向空字符串,在复合 path 字符串不显示驱动器号。

  • dir
    包含目录路径,不包括驱动器指示符或实际的文件名。 尾部斜杠是可选的,并且,对于一个正斜杠 (/) 和反斜杠 (\) 或两者都可能用在单个 dir 参数中。 如果尾部斜杠 (\或/) 未指定,它被自动插入。 如果 dir 是NULL 或指向空字符串,则在复合 path 字符串中不插入目录路径。

  • fname
    包含无任何文件扩展名的基文件名。 如果 fname 是NULL 或指向空字符串,则在复合 path 字符串中不插入文件名。

  • ext
    包含实际文件扩展名,带或不带前导的句点 (.)。 如果不出现在 ext,_makepath 会自动插入时间。 如果 ext 是NULL 或指向空字符串,则在复合 path 字符串中不插入扩展。

备注

_makepath 函数在单个组件中创建复合路径字符串,在path中存储结果。 path 可以包括驱动器号、目录路径、文件名和文件名扩展。 _wmakepath_makepath 的宽字符版本;_wmakepath 的参数是宽字符串。 _wmakepath_makepath 行为相同,否则。

Security Note使用以 NULL 结尾的字符串。 若要避免缓冲区溢出,以 null 终止的字符串不能超过 path 缓冲区的大小。 _makepath 不保证复合路径字符串的长度不超过 _MAX_PATH。 有关更多信息,请参见避免缓冲区溢出

一般文本例程映射

Tchar.h 例程

未定义 _UNICODE 和 _MBCS

已定义 _MBCS

已定义 _UNICODE

_tmakepath

_makepath

_makepath

_wmakepath

参数 path 必须指向足够大空缓冲区以容纳完整路径。 复合 path 必须大于 _MAX_PATH 常数,在 Stdlib.h中定义。

如果路径是 NULL,则将调用无效参数处理程序,如参数验证所述。 此外,将errno 设置为 EINVAL。 NULL 值允许所有其他参数。

要求

例程

必需的标头

_makepath

<stdlib.h>

_wmakepath

<stdlib.h> 或 <wchar.h>

有关更多兼容性信息,请参见“简介”中的兼容性

示例

// crt_makepath.c
#include <stdlib.h>
#include <stdio.h>

int main( void )
{
   char path_buffer[_MAX_PATH];
   char drive[_MAX_DRIVE];
   char dir[_MAX_DIR];
   char fname[_MAX_FNAME];
   char ext[_MAX_EXT];

   _makepath( path_buffer, "c", "\\sample\\crt\\", "makepath", "c" ); // C4996
   // Note: _makepath is deprecated; consider using _makepath_s instead
   printf( "Path created with _makepath: %s\n\n", path_buffer );
   _splitpath( path_buffer, drive, dir, fname, ext ); // C4996
   // Note: _splitpath is deprecated; consider using _splitpath_s instead
   printf( "Path extracted with _splitpath:\n" );
   printf( "  Drive: %s\n", drive );
   printf( "  Dir: %s\n", dir );
   printf( "  Filename: %s\n", fname );
   printf( "  Ext: %s\n", ext );
}
  

.NET Framework 等效项

System::IO::File::Create

请参见

参考

文件处理

_fullpath、_wfullpath

_splitpath、_wsplitpath

_makepath_s、_wmakepath_s