在指定的驱动器上获取当前工作目录的完整路径。
语法
char *_getdcwd(
int drive,
char *buffer,
int maxlen
);
wchar_t *_wgetdcwd(
int drive,
wchar_t *buffer,
int maxlen
);
参数
drive
一个指定驱动器的非负整数(0 = 默认驱动器,1 = A,2 = B,依此类推)。
如果指定的驱动器不可用,会调用无效的参数处理程序。 当无法确定驱动器类型(例如可移动、固定、CD-ROM、RAM 磁盘或网络驱动器)时,也会调用它。 有关详细信息,请参阅参数验证。
buffer
路径的存储位置,或NULL。
如果指定NULL ,此函数会使用malloc分配至少maxlen大小的缓冲区,并且_getdcwd的返回值是指向分配的缓冲区的指针。 可通过调用 free 并为其传递指针来释放缓冲区。
maxlen
一个指定路径的最大长度(以字符为单位)的非零正整数: char 的 _getdcwd 和 wchar_t 的 _wgetdcwd。
如果maxlen小于或等于 0,则将调用无效参数处理程序。 有关详细信息,请参阅参数验证。
返回值
指向字符串的指针,该字符串表示指定驱动器上当前工作目录的完整路径,或指示错误的 NULL。
如果将buffer指定为NULL且内存不足而无法分配maxlen字符,会出现错误且errno将设置为ENOMEM。 如果包含终止 null 字符的路径的长度超过maxlen,会出现错误且errno会设置为ERANGE。 有关这些错误代码的详细信息,请参阅 errno、_doserrno、_sys_errlist 和 _sys_nerr。
备注
_getdcwd 函数将获取指定驱动器上当前工作目录的完整路径,并将其存储在 buffer中。 如果当前工作目录设置为根目录,则字符串以反斜杠 (\) 结尾。 如果当前工作目录设置为根目录之外的目录,则字符串以该目录的名称结尾,而不是以反斜杠结尾。
_wgetdcwd 是 _getdcwd的宽字符版本,并且其 buffer 参数和返回值都是宽字符字符串。 除此以外, _wgetdcwd 和 _getdcwd 的行为完全相同。
此函数是线程安全的,即使它依赖于本身不是线程安全的GetFullPathName。 但是,如果多线程应用程序调用此函数和GetFullPathName,可以违反线程安全性。
具有_nolock后缀的此函数版本与此函数的行为相同,但它不是线程安全的,并且会受到其他线程的影响。 有关详细信息,请参阅 _getdcwd_nolock、 _wgetdcwd_nolock。
在定义_DEBUG和_CRTDBG_MAP_ALLOC时,对_getdcwd和_wgetdcwd的调用会替换为对_getdcwd_dbg和_wgetdcwd_dbg的调用,以便你能够调试内存分配。 有关详细信息,请参阅_getdcwd_dbg, _wgetdcwd_dbg。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
一般文本例程映射
| Tchar.h 例程 | _UNICODE 和 _MBCS 未定义 |
_MBCS 已定义 |
_UNICODE 已定义 |
|---|---|---|---|
_tgetdcwd |
_getdcwd |
_getdcwd |
_wgetdcwd |
要求
| 例程 | 必需的标头 |
|---|---|
_getdcwd |
<direct.h> |
_wgetdcwd |
<direct.h> 或 <wchar.h> |
有关兼容性的详细信息,请参阅 兼容性。
示例
请参见 _getdrive中的示例。