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

时间:2013-03-29 20:52:37

标签: 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命令(仅从我的dir调用中打印getcwd)时,我会得到一个正确装入的路径。一旦我开始更改工作目录,那么外壳总是匹配我的字符串而不是实际的文件夹外壳。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

TCHAR tchPath[MAX_PATH];
GetFullPathName(TEXT("."), MAX_PATH, tchPath, NULL);