文件路径长了255个字符,这个“255”如何解释?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件路径长了255个字符,这个“255”如何解释?相关的知识,希望对你有一定的参考价值。

我正在开发一个Visual Basic项目,我们开发一个Word选项卡。我遇到了一个问题,当用户使用路径超过255个字符的word文档时,会出现以下错误。

Unexpected error 9105 : String is longer than 255 characters.

我在网上搜索了“255”是如何创建并发现的

Windows中存在限制,文件/文件夹的最大绝对文件路径长度为MAX_PATH(定义为260)。

还发现,

Microsoft Office文档的完整路径包括驱动器号或服务器名称,以及所有字符和文件夹名称,包括文档名称。整个路径在Word中不能超过242个字符,在Excel中不能超过218个。

我也在为问题做测试时发现,当文件路径长度为254时,我们也有相同的错误,这是因为看不见的NUL终结符。

255 = 254 + 1(NUL终止符)

有人可以解释一下这个“255”是如何创建的吗?理论是什么?

谢谢。

答案

我无法准确地告诉你为什么操作系统设计者决定将长度限制在260个字符以外,我确信内存分配考虑因素与它有关。但我可以告诉你一个缩短路径名的技巧,这样每个目录只有8个字符(也称为8.3别名)。这将允许27级深度的路径名称,这应该解决大多数(如果不是全部)问题。

如果您有此路径名称:

C:my long directorymy other long directory namemy long directory againmy long file.txt

短版本将是:

C:MYLONG~1MYOTHE~1MYLONG~2MYLONG~1.TXT

要以编程方式获取短路径名称(从here借用):

Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal longPath As String, ByVal shortPath As String, ByVal shortBufferSize As Long) As Long

'The path you want to convert to its short representation path.
Dim longPathName As String

longPathName = "C:my long directorymy other long directory namemy long directory againmy long file.txt"

'Get the size of the string to pass to the string buffer.
Dim longPathLength As Long

longPathLength = Len(longPathName)

'A string with a buffer to receive the short path from the api call…
Dim shortPathName As String

shortPathName = Space$(longPathLength)

'Will hold the return value of the api call which should be the length.
Dim returnValue As Long

'Now call the function to do the conversion…
returnValue = GetShortPathName(longPathName, shortPathName, longPathLength)

MsgBox(shortPathName)

您可以在任何使用通常路径名的上下文中使用短路径名称。

由于你对这些事情感兴趣,Windows最初取代了MS-DOS,它允许最多8个字符的文件名和/或目录名,并带有可选的三字符扩展名。 Windows希望支持更长的文件和路径名,而不会破坏与DOS格式的兼容性,因此他们想出了这种缩写长文件名的方法。

有关更多信息,请参阅Naming Files, Paths and Namespaces

另一答案

您可以使用Unicode(-W)函数访问非常长的路径名。这是一项更多的工作,但并不是那么困难。这是关于这个主题的Microsoft article。有一些限制(例如没有相对路径),但整体上它运作良好。

此外,MAX_PATH已在最新的Win 10更新中进行了扩展,但它需要组策略编辑才能启用新长度。

以上是关于文件路径长了255个字符,这个“255”如何解释?的主要内容,如果未能解决你的问题,请参考以下文章

Windows 和 Unix 上文件名的 255 个字符限制是整个路径还是路径的一部分?

windows中,文件名最长可达多少个字符?是255还是256?

navicat用excel导入数据,由于字段数超过255个,导入时navicat读不到excel中255个以后的字段,如何解决

windows中,文件名最长可达多少个字符?是255还是256?

filename too long——探究Linux支持最长文件名255字节还是字符

如何使 WPF 窗口标题的文本长度大于 255 个字符?