_fullpath_wfullpath

创建指定相对路径名称的绝对或完整路径名称。

语法

char *_fullpath(
   char *absPath,
   const char *relPath,
   size_t maxLength
);
wchar_t *_wfullpath(
   wchar_t *absPath,
   const wchar_t *relPath,
   size_t maxLength
);

参数

absPath
指向包含绝对路径名称或完整路径名称的缓冲区的指针或 NULL

relPath
相对路径名称。

maxLength
绝对路径名称缓冲区 (absPath) 的最大长度。 对于 _fullpath,此长度以字节为单位,但是对于 wchar_t,此长度以宽字符 (_wfullpath) 为单位。

返回值

其中每个函数都会返回指向包含绝对路径名称 (absPath) 的缓冲区的指针。 如果存在错误(例如,如果在 relPath 中传递的值包含一个无效或无法找到的驱动器号,或者创建的绝对路径名称 [absPath] 的长度大于 maxLength),该函数将返回 NULL

备注

_fullpath 函数将 relPath 中的相对路径名称扩展到其完全限定或绝对路径,并在 absPath 中存储此名称。 如果 absPathNULL,则使用 malloc 分配足够长的缓冲区以容纳路径名称。 调用方负责释放此缓冲区。 相对路径名称指定从当前位置到另一个位置的路径(如当前工作目录:.)。 绝对路径名称是相对路径名称的扩展,表示需要采用完整路径才能从文件系统的根达到所需的位置。 与 _makepath 不同,_fullpath 可用于获取相对路径 (relPath) 的绝对路径名称,其中相对路径的名称中包括 ./../

例如,若要使用 C 运行时例程,该应用程序必须包括包含例程声明的头文件。 每个头文件 #include 指令以相对方式(从应用程序的工作目录)引用文件位置:

#include <stdlib.h>

当文件的绝对路径(实际的文件系统位置)可能是:

\\machine\shareName\msvcSrc\crt\headerFiles\stdlib.h

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

_fullpath 将根据情况自动处理多字节字符串参数,根据当前正在使用的多字节代码页识别多字节字符序列。 _wfullpath_fullpath 的宽字符版本;_wfullpath 的字符串参数是宽字符字符串。 _wfullpath_fullpath 的行为方式相同,只不过 _wfullpath 不处理多字节字符字符串。

如果定义了 _DEBUG_CRTDBG_MAP_ALLOC,对 _fullpath_wfullpath 的调用会替换为对 _fullpath_dbg_wfullpath_dbg 的调用,从而让你能够调试内存分配。 有关详细信息,请参阅 _fullpath_dbg_wfullpath_dbg

如果 maxlen 小于或等于 0,此函数将调用无效参数处理程序,如参数验证中所述。 如果允许执行继续,则该函数将 errno 设置为 EINVAL 并返回 NULL

一般文本例程映射

Tchar.h 例程 _UNICODE and _MBCS 未定义 _MBCS 已定义 _UNICODE 已定义
_tfullpath _fullpath _fullpath _wfullpath

如果 absPath 缓冲区为 NULL_fullpath 会调用 malloc 来分配缓冲区,并忽略 maxLength 参数。 调用方负责根据需要解除分配此缓冲区(使用 free)。 如果 relPath 参数指定一个磁盘驱动器,则该驱动器的当前目录结合使用此路径。

要求

函数 必需的标头
_fullpath <stdlib.h>
_wfullpath <stdlib.h><wchar.h>

有关兼容性的详细信息,请参阅 兼容性

示例

// crt_fullpath.c
// This program demonstrates how _fullpath
// creates a full path from a partial path.

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

void PrintFullPath( char * partialPath )
{
   char full[_MAX_PATH];
   if( _fullpath( full, partialPath, _MAX_PATH ) != NULL )
      printf( "Full path is: %s\n", full );
   else
      printf( "Invalid path\n" );
}

int main( void )
{
   PrintFullPath( "test" );
   PrintFullPath( "\\test" );
   PrintFullPath( "..\\test" );
}
Full path is: C:\Documents and Settings\user\My Documents\test
Full path is: C:\test
Full path is: C:\Documents and Settings\user\test

另请参阅

文件处理
_getcwd_wgetcwd
_getdcwd_wgetdcwd
_makepath_wmakepath
_splitpath_wsplitpath