获取文件c ++的目录

时间:2015-07-25 17:52:40

标签: c++

我正在编写一个文件管理器类,该类有一个名为" 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";

因此,如果他们提供了直接地址,并且我准备了工作目录,那就错了。

所以问题是这样,我怎样才能确定他们是发送了绝对地址还是间接地址?

4 个答案:

答案 0 :(得分:1)

不直接回答您的问题,但这可能会对您有所帮助。我不知道你的工作目的是什么(玩一些代码,学术,企业等),我不知道你可能有什么限制。但请考虑Boost C++ librariesBoost 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>标题。

POSIX有realpathdirname

可能您的Windows操作系统有一些特定于操作系统的API,可能是here

您可以使用QtPOCOBoost。所有提供一些API包装目录和文件系统。

AFAIK当前目录的概念是特定于操作系统的,在Windows和POSIX(其中包含 当前工作目录的进程中有所不同{{3} })。 IIRC MS-DOS(可能是Windows)在每个驱动器上都有一个当前目录。

答案 3 :(得分:0)

除了驱动器号之外,你不会在路径中的任何地方找到冒号':'。如果是绝对的,请看字符2.

您还必须查找前缀为“\\”的路径以获取UNC路径。

注意你是如何获得工作目录的。明显的argv [0]并不总是成立。