在windows程序中我使用_fulpath函数来获取文件/目录的绝对路径。
以下是我的方框中的示例代码及其输出:
void PrintFullPath(char * partialPath)
{
char full[_MAX_PATH];
if (_fullpath(full, partialPath, _MAX_PATH) != NULL)
printf("Full path is: %s\n", full);
else
printf("Invalid path\n");
}
int main(void)
{
PrintFullPath("c:\\tmp\\");
PrintFullPath("c:");
PrintFullPath("f:");
}
完整路径是:c:\ tmp \
完整路径为:C:\ Users \ Projects \ fullpath \ fullpath
完整路径是:F:\
在第二个PrintFullPath中,如果我从C盘中的某个路径运行我的exe,PrintFullPath会给我程序的CWD而不是c:。 第一和第三PrintFullPath工作正常。
如果我用" c:\\"来调用PrintFullPath。它工作正常。 知道为什么会出现这种行为吗?
答案 0 :(得分:7)
因为那是DOS的工作方式。
打开命令窗口。例如,输入F:
。您当前的驱动器可能会更改为F:\
。切换到F:
驱动器上的另一个目录。现在,输入C:
更改为C:
,然后切换到C:
驱动器上的目录。重新输入F:
,您就会发现自己仍然位于之前F:
驱动器上的同一目录中。
在Windows上,每个驱动器都有自己的当前目录。见Why does each drive have its own current directory?
并且C:
指的是C:
驱动器的当前目录 - 而不是C:
驱动器的根目录,而C:\
代表的驱动器的根目录。< / p>