【问题标题】:Long- and Multi-format Path Manipulation Library?长格式和多格式路径操作库?
【发布时间】:2012-04-15 12:25:37
【问题描述】:

是否有任何路径开源操作库支持以下所有?

  • 不受限制的路径长度(即唯一的限制应该是在size_t 的范围内,不是任意限制,例如 256 个字符)

  • 基本操作,如规范化,相当于basenamedirname、获取文件扩展名、获取根等。

  • 所有有效的 Windows 样式路径和文件名,例如 \RootedDir/C:\Dir/fooFile\\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


【解决方案1】:

听起来像是来自Qt 4QDirQFileInfo

【讨论】:

    【解决方案2】:

    cwalk 可以做到这一点。这是一个小型 C 路径库。

    【讨论】:

    • 支持,但它似乎有问题......例如查找扩展时似乎无法处理 NTFS 流或属性...
    • 你是对的,不支持 ADS - 但是,这是否被认为是路径的一部分?微软的PathFindExtensionAPath.GetExtension 似乎也不支持。好像连documented都没有?
    • 众所周知,Microsoft 的路径 API 存在漏洞。它们甚至都不支持长于MAX_PATH 字符的路径(直到最近的部分更改)。他们也会变得很奇怪。在命令提示符下尝试dir /b "C:\Windows:$I30:$INDEX_ALLOCATION\Notepad.exe"
    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2014-01-01
    • 2012-08-17
    相关资源
    最近更新 更多