2

为了更好地熟悉 C++,我正在重做一个旧的大学操作系统任务:编写自己的 shell。我正在使用各种Windows.h我从未知道存在的东西。到目前为止,我已经取得了不错的进展,但我注意到了一些关于我的cd实现和我从getcwd.

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

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

4

2 回答 2

1

您可以使用GetFullPathNameAPI 函数返回当前目录的正确(大小写正确)路径,如下例所示:

TCHAR tchPath[MAX_PATH];
GetFullPathName(TEXT("."), MAX_PATH, tchPath, NULL);
于 2013-03-30T01:01:46.760 回答
1

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

如果您需要大写的驱动器号,该GetShortPathName函数将返回驱动器号大写的短路径。然后,您可以将此短路径传递给GetLongPathName,这会将其转换为正确大小写的长路径,但这不是 cmd 所做的。

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

于 2013-03-29T21:06:24.037 回答