【发布时间】:2012-04-15 12:25:37
【问题描述】:
是否有任何路径开源操作库支持以下所有?
不受限制的路径长度(即唯一的限制应该是在
size_t的范围内,不是任意限制,例如 256 个字符)基本操作,如规范化,相当于
basename、dirname、获取文件扩展名、获取根等。-
所有有效的 Windows 样式路径和文件名,例如
\Rooted、Dir/、C:\Dir/foo、File、\\Computer\Dir/File、\\.\C:、Foo\./.\Bar:ADS、或\\?\C:\Dir\Escaped:ADS:$DATA- 我相信这也应该涵盖 POSIX 样式的路径,但如果不是,这些也应该可以工作
我更喜欢 C++,但 C 也不错。
【问题讨论】:
-
好吧,绝对不是 boost.filesystem。它在非常语法级别上运行,并假设路径语法接近 POSIX(例如,扩展是从最后一个点到字符串的末尾)...
-
如果您不希望它是特定于 Windows 的,我认为您要求的有点过多。例如,在大多数系统上,过长的路径名不能直接使用,句号。您必须手动
chdir或多次使用openat才能到达目标文件。所以即使库没有限制,它返回的路径名也没什么用。此外,在非 Windows 系统上,文件没有规范名称(POSIX 有硬链接)... -
@Mehrdad:扩展不仅仅是字符串末尾的最后一个点。比如
/home/me/.config/foo,扩展名是空的,不是.config/foo。 -
@Mehrdad:不。这种情况它实际上处理正确(它比我说的更复杂),但我的意思是因为像
myfile.dat:stream1:$DATA这样的事情。扩展名是.dat,而不是.dat:stream1:$DATA。可悲的是作者试图将他的库推向 C++ 标准。 -
@R.. :Windows (NTFS) 系统也不再有规范名称。最好的方法是路径重整化(即删除
\.\和\..\)
标签: c++ c path path-manipulation