我正在编写一个文件管理器类,该类有一个名为" dir"保存已打开文件的目录。
因此,请使用以下代码
File f("test.txt");
然后f.dir = "C:\...\current_directory\test.txt";
我实现这一点只是将工作目录附加到给定字符串的开头。然而,这种方法采用这个例子
File f("C:\...\Desktop\cool.txt");
此处f.dir = "C:\...\current_directory\C:\...\Desktop\test.txt";
因此,如果他们提供了直接地址,并且我准备了工作目录,那就错了。
所以问题是这样,我怎样才能确定他们是发送了绝对地址还是间接地址?
答案 0 :(得分:1)
不直接回答您的问题,但这可能会对您有所帮助。我不知道你的工作目的是什么(玩一些代码,学术,企业等),我不知道你可能有什么限制。但请考虑Boost C++ libraries和Boost FileSystem library,这使得此任务变得非常简单。
答案 1 :(得分:1)
正如其他答案所述,最好找一个能够做到这一点的外部图书馆;然而,话虽如此,看起来你正在使用Windows。有一个Windows API调用可以解析完整路径的相对路径并保留完整路径:GetFullPathName
(请参阅here)。
#include <stdio.h>
#include <windows.h>
int main() {
DWORD ret;
char buf[1024];
ret = GetFullPathName("test.cpp", 1024, buf, NULL);
if (ret) printf("%s\n", buf);
ret = GetFullPathName("C:\\path\\to\\test.cpp", 1024, buf, NULL);
if (ret) printf("%s\n", buf);
}
答案 2 :(得分:0)
标准C ++ 11中不存在目录(符合C ++ 11的实现可以在没有任何目录的情况下存在)。未来的C ++标准可能与文件系统有关,例如<experimental/filesystem>
标题。
可能您的Windows操作系统有一些特定于操作系统的API,可能是here。
您可以使用Qt或POCO或Boost。所有提供一些API包装目录和文件系统。
AFAIK当前目录的概念是特定于操作系统的,在Windows和POSIX(其中包含 当前工作目录的进程中有所不同{{3} })。 IIRC MS-DOS(可能是Windows)在每个驱动器上都有一个当前目录。
答案 3 :(得分:0)
除了驱动器号之外,你不会在路径中的任何地方找到冒号':'。如果是绝对的,请看字符2.
您还必须查找前缀为“\\”的路径以获取UNC路径。
注意你是如何获得工作目录的。明显的argv [0]并不总是成立。