gpt4 book ai didi

excel - 访问长路径的文件(超过 260 个)

转载 作者:行者123 更新时间:2023-12-02 00:23:52 27 4
gpt4 key购买 nike

我正在使用 Microsoft Scripting Runtime (FSO) 来解析文件夹并生成其所有内容的列表,这些文件夹位于网络上,并且生成的路径最终超过 260。我的最小代码如下: -

Private Sub ProcessFolder(ByVal StrFolder As String)
Dim Fl As File
Dim Fldr As Folder
Dim RootFldr As Folder

Set RootFldr = FS.GetFolder(StrFolder)

For Each Fl In RootFldr.Files
Debug.Print Fl.Path
Next

For Each Fldr In RootFldr.SubFolders
DoEvents
ProcessFolder Fldr.Path
Next

Set RootFldr = nothing
End sub

在某个级别,StrFolder 长度变为 259,Set RootFldr ... 文件夹行可以工作,但 For Each Fl In RootFldr.Files给出了76:找不到路径的错误,大概是因为内容导致路径违反了260限制。

在 Windows 资源管理器中查看时,文件夹中有文件。我使用 Excel 作为此代码的主机,因为我将结果输出到工作簿。

为了非常清楚地了解我的问题及其背景,我需要使用 FSO(很高兴看到替代方案,如果存在的话)来访问其网络路径深度超过 260 个字符的文件。我需要它作为 FSO,因为我拥有的工具正在获取文件夹路径和文件路径、名称、创建和修改的大小。

最佳答案

将 MAXFILE 占用的 DOS 路径名转换为 native 操作系统路径名的技术已经成熟 and documented 。总结:

  • 在使用驱动器盘符的路径前加上 \\?\ 前缀,例如 \\?\C:\foo\bar\baz.txt
  • 在使用文件共享的路径前加上 '\\?\UNC\ 前缀,例如 \\?\UNC\server\share\baz.txt

也可以与 FileSystemObject 配合使用,至少当我在 Windows 10 上测试您的代码时是这样。在较旧的 Windows 版本或服务器上的网络重定向器中,情况可能不一定如此。通过使用 FAR 文件管理器创建具有长名称的子目录进行测试并通过以下方式进行验证:

Dim path = "\\?\C:\temp\LongNameTest"
ProcessFolder path

制作:

\\?\c:\temp\LongNameTest\VeryLongFolderName0123456789012345678901234567890123456789012345678901234567890123456789\VeryLongFolderName0123456789012345678901234567890123456789012345678901234567890123456789\VeryLongFolderName0123456789012345678901234567890123456789012345678901234567890123456789\VeryLongFolderName0123456789012345678901234567890123456789012345678901234567890123456789\VeryLongFolderName0123456789012345678901234567890123456789012345678901234567890123456789\Chrysanthemum.jpg

长度为 488 个字符。需要记住的事情:

  • native 路径名必须是完整路径,不能是相对路径。换句话说,它们必须始终以驱动器号或共享名称开头,并从驱动器/共享的根目录开始。
  • 您将恢复 native 路径名称,如果显示它,请不要忘记再次删除前缀。
  • 未经测试,但应该会失败,文件名本身的长度(不包括目录名)仍然有限制,不能超过 259 个字符。根本不应该成为问题,因为用户也无法创建它们。

关于excel - 访问长路径的文件(超过 260 个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38432250/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com