文件路径(path)

include: co/path.h.

#path

此部分功能移植于 golang,路径分隔符必须为 /

#path::clean

fastring clean(const char* s, size_t n);
fastring clean(const char* s);
fastring clean(const fastring& s);
  • 返回路径的最短等价形式,路径中连续的分隔符会被清除掉。

  • 示例

path::clean("");            // "."
path::clean("./x//y/");     // "x/y"
path::clean("./x/..");      // "."
path::clean("./x/../..");   // ".."

#path::join

template<typename ...S>
inline fastring join(S&&... s);
  • 将任意数量的字符串拼接成一个完整的路径,返回 path::clean 处理后的结果。

  • 参数中的空字符串将会被忽略。

  • 示例

path::join("", "");         // ""
path::join("x", "y", "z");  // "x/y/z"
path::join("/x/", "y");     // "/x/y"

#path::split

std::pair<fastring, fastring> split(const char* s, size_t n);
std::pair<fastring, fastring> split(const char* s);
std::pair<fastring, fastring> split(const fastring& s);
  • 将路径切分为 dir, file 两部分,若路径中不含分隔符,则 dir 部分为空。

  • 返回结果满足性质 path = dir + file

  • 示例

path::split("/");     // -> { "/", "" }
path::split("/a");    // -> { "/", "a" }
path::split("/a/");   // -> { "/a/", "" }
path::split("/a/b");  // -> { "/a/", "b" }

#path::dir

fastring dir(const char* s, size_t n);
fastring dir(const char* s);
fastring dir(const fastring& s);
  • 返回路径的目录部分,返回值是 path::clean 处理后的结果。

  • 示例

path::dir("a");      // "."
path::dir("a/");     // "a"
path::dir("/");      // "/"
path::dir("/a");     // "/";
path::dir("/a/");    // "/a";

#path::base

fastring base(const char* s, size_t n);
fastring base(const char* s);
fastring base(const fastring& s);
  • 返回路径最后的一个元素。

  • s 是空字符串时,返回 “."。

  • s 中字符全是 / 时,返回 “/"。

  • 其他情况,先将 s 末尾的 / 去掉。

  • 示例

path::base("");      // "."
path::base("/");     // "/"
path::base("/a/");   // "a"
path::base("/a");    // "a"
path::base("/a/b");  // "b"

#path::ext

fastring ext(const char* s, size_t n);
fastring ext(const char* s);
fastring ext(const fastring& s);
  • 返回路径中的文件扩展名。

  • 示例

path::ext("/a.c");   // ".c"
path::ext("a/b");    // ""
path::ext("/a.c/");  // ""
path::ext("a.");     // "."