【问题标题】:Writing to an external file with long file name with Ruby File.open使用 Ruby File.open 写入具有长文件名的外部文件
【发布时间】:2019-08-01 22:22:55
【问题描述】:

当我尝试将 Ruby v2.3.3 中的文件写入 Windows 上的文件夹时出现错误。

这是我以前用过很多次的代码,它运行良好。

File.open(file_name, "w+") { |out| out.puts "Hello" }

这适用于短文件名,但显然无法使用大约 200 个字符的文件名(包括文件夹路径)。我得到的错误是文件或文件夹不存在。该方法是创建文件,因此它显然不需要事先存在。而且该文件夹确实存在——我测试了很多次。所以我不明白错误信息。

我尝试使用较短的文件名运行它,然后它运行良好。

有没有办法解决这个错误?这真的是 Ruby 错误,还是更像是 Windows 限制?

【问题讨论】:

    标签: ruby windows file


    【解决方案1】:

    how long a path can be in Windows 有一个硬性限制,大约 260 个字符:

    在 Windows API(以下段落中讨论的一些例外情况)中,路径的最大长度为 MAX_PATH,定义为 260 个字符。

    每个操作系统都有某种限制,以允许 C 程序分配适当长度的缓冲区。 PATH_MAX 因操作系统而异,但通常在 255-1024 范围内。

    This question 更详细地介绍了这类事情对 Windows 的影响。

    【讨论】:

    • 在 Windows 10 中,如果在系统级别和应用程序清单中都启用了长路径支持(即我想是 ruby​​.exe),则在大多数情况下会删除 MAX_PATH 限制。在所有版本的 Windows NT 中,如果我们手动组成一个完全限定的 Unicode 路径(即 WINAPI GetFullPathNameW)并在其前面加上设备根目录“\\?\”,我们就可以使用长路径。如果是 UNC 设备,我们需要将开头的“\\”替换为“\\?\UNC\”。如果是普通设备路径,请将“\\.\”替换为“\\?\”。
    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 2014-06-17
    • 2023-03-04
    相关资源
    最近更新 更多