c++ - 获取正确的案例工作目录?

标签 c++ winapi

为了更好地熟悉 C++,我正在重做一项旧的大学操作系统作业:编写您自己的 shell。我正在使用各种我以前不知道的 Windows.h。到目前为止,我已经取得了很好的进展,但我注意到一些关于我的 cd 实现和我从 getcwd 返回的工作目录的事情。

我的 cd 命令做了一些错误检查,但最终归结为 chdir(path)。假设我在 C:\ 并且存在一个文件夹 FOLDER。如果我使用 chdir("folder") 然后稍后当我调用 getcwd(dir, FILENAME_MAX) 时我会得到字符串 C:\folder 而不是大小写正确的字符串 C:\FOLDER。我怎样才能检索到每个文件夹都有正确大小写的工作目录?

注意:当我第一次启动我的 shell 并运行我的 pwd 命令(它只从我的 getcwd 调用中打印 dir)时,我得到正确大小写的路径。一旦我开始更改工作目录,外壳就会始终匹配我的字符串,而不是实际的文件夹外壳。

最佳答案

我认为 Windows 命令提示符只使用 GetLongPathName,它返回具有适当大小写的路径(但是,它不会更改驱动器号的大小写)。

如果您需要大写的驱动器盘符,GetShortPathName 函数返回驱动器盘符大写的短路径。然后您可以将这个短路径传递给 GetLongPathName,这会将它变成一个适当大小写的长路径,但这不是 cmd 的作用。

您也可以使用 SHGetFileInfo,但这不是最简单的方法。

关于c++ - 获取正确的案例工作目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15711243/

相关文章:

c# - 如何捕获另一个程序的异常(用于日志记录)?

c++ - 复制安全信息

c++ - exe 的 md5 没有给出预期的摘要

C++ 管道/ReadFile lpNumberOfBytesRead/DLL

c++ - 用 x 轴计算角度的最快方法

c++ - 如何在不使用目录的情况下在磁盘上查找文件

c++ - 如何修复我的 C++ 大小写切换菜单?

c++ - 在 Objective-C 代码中使用带有 C++ 实例变量的 Objective-C++ 类

c++ - 如何检测我的程序可用的堆栈空间量?

c++ - 打印线程(c++)的调用堆栈,是否使用 StackWalker?