c++ 如何解析文件路径

chhqkbe1  于 2023-02-26  发布在  其他
关注(0)|答案(3)|浏览(157)

我需要创建一个函数来删除文件路径中的任何内容,例如..“”或.“”。因此,如果我执行resolvePath("/root\\\\directory1/directory2\\\\\\\\.."),它将返回"root/directory1。我尝试为路径的每一部分创建一个char* 数组,但我无法获得它的每一段。

7rfyedvj

7rfyedvj1#

两个真正的跨平台替代方案是boost和Qt,下面我们演示了这两个方案:

增强溶液:boost::文件系统::规范

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溶液:Q文件信息

QFileInfo fileInfo("/root\\\\directory1/directory2\\\\\\\\.."))

qDebug() << fileInfo.canonicalFilePath();
pokxtpni

pokxtpni2#

从你给出的示例路径看,你是在一个类Unix系统上,你可以使用realpath()来规范你的路径,这至少存在于Linux,BSD和Mac OS上。
http://man7.org/linux/man-pages/man3/realpath.3.html

vhmi4jdf

vhmi4jdf3#

    • 现在可从标准库(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

相关问题