setCurrentDirectory 函数 (winbase.h)
更改当前进程的当前目录。
语法
BOOL SetCurrentDirectory(
[in] LPCTSTR lpPathName
);
参数
[in] lpPathName
新的当前目录的路径。 此参数可以指定相对路径或完整路径。 在任一情况下,指定目录的完整路径都计算并存储为当前目录。
有关详细信息,请参阅 命名文件、路径和命名空间。
默认情况下,名称限制为 MAX_PATH 个字符。
提示
从 Windows 10 版本 1607 开始,可以选择删除MAX_PATH限制。 有关详细信息,请参阅命名文件、路径和命名空间的“最大路径长度限制”部分。
重要
设置超过 MAX_PATH 的当前目录会导致 CreateProcessW 失败。
null 字符之前的最后一个字符必须是反斜杠 ('\') 。 如果未指定反斜杠,则会为你添加反斜杠。 因此,请为路径指定 >MAX_PATH-2 个字符,除非包含尾随反斜杠;在这种情况下,请为路径指定 MAX_PATH-1 个字符。
返回值
如果函数成功,则返回值为非零。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
注解
每个进程都有一个当前目录,由两个部分组成:
- 磁盘指示符,后跟冒号的驱动器号,或服务器名称和共享名称 (\\servername\sharename)
- 磁盘指示符上的目录
当前目录由进程的所有线程共享:如果一个线程更改当前目录,它将影响进程中的所有线程。
多线程应用程序和共享库代码应避免调用 SetCurrentDirectory 函数,因为存在影响其他线程执行的相对路径计算的风险。 相反
多线程应用程序和共享库代码应避免使用相对路径,以便它们不受其他线程对当前目录的更改影响。
注意
进程正在执行时,进程的当前目录处于锁定状态。 这可以防止删除、移动或重命名目录。
在 Windows 8 和 Windows Server 2012 中,此函数由以下技术支持。
技术 | 支持 |
---|---|
服务器消息块 (SMB) 3.0 协议 | 是 |
SMB 3.0 透明故障转移 (TFO) | 是 |
具有横向扩展文件共享的 SMB 3.0 (SO) | 是 |
群集共享卷文件系统 (CSV) | 是 |
弹性文件系统 (ReFS) | 是 |
示例
有关示例,请参阅 更改当前目录。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | winbase.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |