1. ホーム
  2. c++

[解決済み] パスからファイル名を取得する

2022-12-31 08:10:23

質問

パスからファイル名を取得する最も簡単な方法は何ですか?

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

この例では、拡張子なしで "MyFile"を取得する必要があります。

どのように解決するのですか?

スプリットパス で必要なことができるはずです。もちろん、手動で行うこともできますが _splitpath はすべての特殊なケースを同様に処理します。

EDITです。

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;