c - 分割绝对文件路径

新手上路,请多包涵

我正在为学校作业编写 C++ 程序。在某些时候,这个问题需要我更改目录,我知道该怎么做。但是,用户将向程序提供文件的绝对路径。我要做的是将目录更改为该文件所在的位置。例如,如果我在目录 dir2 中,并且用户想要转到该文件

     /home/dir1/dir2/dir3/dir4/file

我想要做

     int ret = chdir("home/dir1/dir2/dir3/dir4");

我的问题是如何将用户给定的字符串拆分为

     /home/dir1/dir2/dir3/dir4/

     file

编辑 我想通了。我首先将绝对路径名从 const char* 转换为字符串。然后我使用 .find_last_of(“/”) 字符串成员来查找字符串中最后一个“/”的位置。然后我使用 .substr() 成员将子字符串从 0 获取到 .find_last_of 返回的那个位置

原文由 The_Questioner 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 876
1 个回答

这个问题的所有其他答案都会找到“/”(Unix)或“\”(Windows),并手动切分字符串;这是冗长的并且受用户错误的影响。 C++17 现在有 std::filesystem 包,它以操作系统友好的方式从路径中干净地提取目录和文件名:

 #include <filesystem>

void Test()
{
    std::filesystem::path path("/home/dir1/dir2/dir3/dir4/file");
    std::string dir = path.parent_path().string(); // "/home/dir1/dir2/dir3/dir4"
    std::string file = path.filename().string(); // "file"
}

原文由 Huw Walters 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题