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

另请参阅