【问题标题】:C# I/O library that supports long paths (to solve PathTooLongException)支持长路径的 C# I/O 库(解决 PathTooLongException)
【发布时间】:2013-02-03 19:49:35
【问题描述】:

我的开源software 将远程文件夹同步到本地桌面。远程文件夹可以在 Alfresco 上,路径长度没有限制 (/root/very/very/very/long/name.txt)。

在开发应用程序时,我使用了System.IO.File.OpenWriteSystem.IO.Stream.Write,但似乎they don't support paths over a few hundred characters,因此用户在处理长路径时会报告PathTooLongException 之类的错误。

UNC 路径必须绝对避免,因为它们会导致与某些应用程序不兼容。

在这种情况下应该使用什么库/代码?

必须是开源C#。

【问题讨论】:

  • 我刚刚注意到您使用了“发布您自己的答案”功能。我愿意打赌你在哪里敲打你的头一段时间来解决这个问题,现在你想分享你是如何解决它的,这样其他人就不必受苦了。 I have been there.

标签: c# winapi io pathtoolongexception


【解决方案1】:

AlphaFS 允许您使用非常长的路径(使用“\?\”样式)并模仿 System.IO 命名空间。

您可能可以像使用 System.IO 一样使用这个库。例如,AlphaFS.Win32.Filesystem.File.Copy() 而不是 System.IO.File.Copy()。

(source)

【讨论】:

    【解决方案2】:

    你可以试试Base Class Libraries Long Path implementation。但请注意,如果您开始与默认的 .NET I/O 方法混用,则并非一切都会奏效。

    【讨论】:

    • 这是推荐的解决方案。 +1 以前广泛使用过。我记得最初发布时那里有一个错误,但它是开源的,我相信它已经被正式修复了。
    • +1 太好了!许可证是开源的微软公共许可证 (Ms-PL),尽管不幸的是它与 GNU-GPL 不兼容:gnu.org/licenses/license-list.html#ms-pl
    【解决方案3】:

    Native File System Access

    自修订版 185(2013 年 2 月 19 日th)以来,该库被 Microsoft Public License (MS-PL) 覆盖,如源代码文件的标题中所指定。

    看起来很有希望,但作者 advises 反对在企业环境中使用它,因为代码不够可靠。

    这个库有一些unit tests,但缺少文档。

    【讨论】:

    • 我不能推荐这个库。基本功能,如 File.Open 不起作用(处理它返​​回的流的句柄并忽略 access/share 参数)并且文件枚举默默地忽略错误。
    【解决方案4】:

    您可以尝试使用此答案中概述的相对路径来拆分路径:

    Directory.SetCurrentDirectory()
    

    PathTooLongException in C# code

    【讨论】:

    • 有趣...也许有一个库可以自动为我做这个技巧?
    【解决方案5】:

    .NET 2.0 Workaround for PathTooLongException”(文章+代码)。

    根据代码项目开放许可证 (CPOL) 获得许可,该许可证不是开源 apparently

    虽然只有 2 次提交并不能构成一个非常活跃的项目...

    【讨论】:

    • 嗯,它并不是真正的“项目”,它只是告诉您使用 PInvoke 调用 CreateFileW 并在路径名称的开头使用 \\?\.
    • 我收回它,我查看了源代码,他确实投入了一些工作。我不会担心“不太活跃”的部分。你只是用一些辅助函数包装了 Windows API,一旦你摆脱了你的错误,就没有什么可做的了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2022-01-22
    • 2015-05-24
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    相关资源
    最近更新 更多