从路径中获取文件名

新手上路,请多包涵

从路径获取文件名的最简单方法是什么?

 string filename = "C:\\MyDirectory\\MyFile.bat"

在这个例子中,我应该得到“MyFile”。没有扩展。

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

阅读 353
2 个回答

_splitpath 应该做你需要的。您当然可以手动操作,但 _splitpath 也可以处理所有特殊情况。

编辑:

正如 BillHoag 提到的,建议使用更安全的 _splitpath 版本,在可用时称为 _splitpath_s

或者如果你想要一些便携的东西,你可以做这样的事情

std::vector<std::string> splitpath(
  const std::string& str
  , const std::set<char> delimiters)
{
  std::vector<std::string> result;

  char const* pch = str.c_str();
  char const* start = pch;
  for(; *pch; ++pch)
  {
    if (delimiters.find(*pch) != delimiters.end())
    {
      if (start != pch)
      {
        std::string str(start, pch);
        result.push_back(str);
      }
      else
      {
        result.push_back("");
      }
      start = pch + 1;
    }
  }
  result.push_back(start);

  return result;
}

...
std::set<char> delims{'\\'};

std::vector<std::string> path = splitpath("C:\\MyDirectory\\MyFile.bat", delims);
cout << path.back() << endl;

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

一个非常简单且简短的函数,它返回我制作的不使用依赖项的文件名+路径:

 const char* GetFileNameFromPath(const char* _buffer)
{
    char c;
    int  i;
    for (i = 0; ;++i) {
        c = *((char*)_buffer+i);
        if (c == '\\' || c == '/')
            return GetFileNameFromPath((char*)_buffer + i + 1);
        if (c == '\0')
            return _buffer;
    }
    return "";
}

要仅获取 没有扩展 名的文件名,您可以将 c == '\0' 更改为 c == '.'

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

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