C++ 长格式和多格式路径操作库?

C++ 长格式和多格式路径操作库?,c++,c,path,path-manipulation,C++,C,Path,Path Manipulation,是否有任何支持以下所有内容的path开源操纵库 不受限制的路径长度(即,唯一的限制应该是大小\u t,而不是任意限制,如256个字符) 基本操作,如规范化、等效于basename、dirname、获取文件扩展名、获取根等 所有有效的Windows样式路径和文件名,例如\Rooted,Dir/,C:\Dir/foo,文件,\\Computer\Dir/file,\.\C:,foo\./.\Bar:ADS,或\?\C:\Dir逃逸:ADS:$DATA 我相信这也应该涵盖POSIX风格的路径,但如

是否有任何支持以下所有内容的path开源操纵库

  • 不受限制的路径长度(即,唯一的限制应该是
    大小\u t
    而不是任意限制,如256个字符)

  • 基本操作,如规范化、等效于
    basename
    dirname
    、获取文件扩展名、获取根等

  • 所有有效的Windows样式路径和文件名,例如
    \Rooted
    Dir/
    C:\Dir/foo
    文件
    \\Computer\Dir/file
    \.\C:
    foo\./.\Bar:ADS
    ,或
    \?\C:\Dir逃逸:ADS:$DATA

    • 我相信这也应该涵盖POSIX风格的路径,但如果不是这样的话,它们也应该起作用

<>我比较喜欢C++,但是C也很好。

< p>听起来像和。< /p> 可以做到。这是一个小的C路径库。

好吧,肯定不是boost.filesystem。它在非常语法的层次上运行,并假设路径语法接近POSIX(例如,扩展是从最后一个点到字符串的末尾)…如果您不希望它是特定于windows的,我认为您的要求有点太高了。例如,在大多数系统上,过长的路径名不能直接使用。您必须手动
chdir
或多次使用
openat
才能到达目标文件。因此,即使库没有限制,它返回的路径名也没有什么用处。此外,在非windows系统上,文件没有规范名称(POSIX有硬链接)..@Mehrdad:扩展名不仅仅是字符串末尾的最后一个点。例如,在
/home/me/.config/foo
中,扩展名是空的,而不是
.config/foo
@Mehrdad:No。这种情况下它实际上处理正确(比我说的要复杂),但我的意思是因为
myfile.dat:stream1:$DATA
之类的原因。扩展名是
.dat
,而不是
。dat:stream1:$DATA
。可悲的是,作者试图将他的库推到C++标准。Windows(NTFS)系统也不再具有规范名称。你能得到的最好的方法是路径重整化(即删除
\.\
\.\\
)向上投票,但它似乎有问题。。。e、 g.在查找扩展时似乎不处理NTFS流或属性…你是对的,ADS不受支持-但是,这是否被认为是路径的一部分?微软和微软似乎也不支持这一点。这似乎不公平?众所周知,微软的path API存在缺陷。它们甚至不支持所有长度超过
MAX\u PATH
字符的路径(直到最近的部分更改)。他们也会变得很奇怪。在命令提示符下尝试
dir/b“C:\Windows:$I30:$INDEX\u ALLOCATION\Notepad.exe”