如何解析文件路径

How to resolve a file path

本文关键字:路径 文件 何解析      更新时间:2023-10-16

我需要创建一个函数来删除诸如".."之类的任何内容或"."在文件路径中。所以如果我做了resolvePath("/root\\directory1/directory2\\\\.."),它会返回"root/directory1。我试着为路径的每一部分制作一个char*数组,但我无法获得它的每一段。

两种真正的跨平台替代方案是boost和Qt,因此下面将展示这两种方案:

Boost解决方案:Boost::filesystem::canonical

path canonical(const path& p, const path& base = current_path());
path canonical(const path& p, system::error_code& ec);
path canonical(const path& p, const path& base, system::error_code& ec);

Qt解决方案:QFileInfo

QFileInfo fileInfo("/root\\directory1/directory2\\\\.."))
qDebug() << fileInfo.canonicalFilePath();

从您给出的示例路径来看,您在一个类似Unix的系统上。然后您可以使用realpath()来规范化您的路径。这至少存在于Linux、BSD和Mac操作系统上。

http://man7.org/linux/man-pages/man3/realpath.3.html

现在可以从标准库(C++17)中获得工作解决方案:

#include <iostream>
#include <filesystem>
int main()
{
    // resolves based on current dir
    std::filesystem::path mypath = std::filesystem::canonical("../dir/file.ext");
    std::cout << mypath.generic_string(); // root/parent_dir/dir/file.ext
    return 0;
}

文件:

https://en.cppreference.com/w/cpp/filesystem/canonical

https://en.cppreference.com/w/cpp/header/filesystem