Windows 10中的最大文件名长度是多少?Java将尝试/捕获将通过exeption实现的功能?

Windows 10中的最大文件名长度是多少?Java将尝试/捕获将通过exeption实现的功能?,java,windows,file,filenames,Java,Windows,File,Filenames,在旧版本的windows中,我知道文件或文件夹的最大长度大约为250个字符,有人知道他们是否在windows 10中更改了它吗 编辑: 我正在围绕给定的API编写一些Java代码,以提取应用程序的一些内容,将有几千个文件,我有点担心会发生什么,因为我不知道文件名和路径会是什么样子,所以我将尝试防止这些错误,可能会在保存前更改Java中的名称,但最好保留原始名称 那么你知道会不会有一些豁免?File File=new FilejsonFile?谢谢,我可能会在catch中处理如果你真的是指文件名,

在旧版本的windows中,我知道文件或文件夹的最大长度大约为250个字符,有人知道他们是否在windows 10中更改了它吗

编辑:

我正在围绕给定的API编写一些Java代码,以提取应用程序的一些内容,将有几千个文件,我有点担心会发生什么,因为我不知道文件名和路径会是什么样子,所以我将尝试防止这些错误,可能会在保存前更改Java中的名称,但最好保留原始名称

那么你知道会不会有一些豁免?File File=new FilejsonFile?谢谢,我可能会在catch中处理

如果你真的是指文件名,我相信限制通常仍然是255个字符,请参阅Windows API中引用的第三段。。。下面

如果您指的是文件路径:您可以启用Win32长路径选项。发件人:

最大路径长度限制

在Windows API中,除以下段落中讨论的一些例外情况外,路径的最大长度为MAX_path,定义为260个字符。本地路径按以下顺序构造:驱动器号、冒号、反斜杠、由反斜杠分隔的名称组件和终止的空字符。例如,驱动器D上的最大路径是D:\256个字符的路径字符串,其中表示当前系统代码页的不可见终止空字符。此处使用的字符<>是为了清晰可见,不能作为有效路径字符串的一部分

Windows API中的文件I/O函数将转换为\作为将名称转换为NT样式名称的一部分,但使用\\?\前缀时除外,详见以下章节

Windows API有许多函数,这些函数也有Unicode版本,允许扩展长度路径的最大总路径长度为32767个字符。这种类型的路径由反斜杠分隔的组件组成,每个组件的最大值为GetVolumeInformation函数的lpMaximumComponentLength参数中返回的值。此值通常为255个字符。要指定扩展长度路径,请使用\\?\前缀。例如,\\?\D:\非常长的路径

32767个字符的最大路径是近似值,因为系统在运行时可能会将\\?\前缀扩展为更长的字符串,并且此扩展适用于总长度

\\?\前缀也可用于根据通用命名约定UNC构造的路径。要使用UNC指定这样的路径,请使用\\?\UNC\前缀。例如,\\?\UNC\server\share,其中server是计算机的名称,share是共享文件夹的名称。这些前缀不作为路径本身的一部分使用。它们表示应该通过最小修改将路径传递给系统,这意味着您不能使用正斜杠表示路径分隔符,或使用句点表示当前目录,或使用双点表示父目录。由于不能将\\?\前缀与相对路径一起使用,因此相对路径始终限制为最多\u个路径字符

不需要对路径和文件名字符串执行任何Unicode规范化,以供Windows文件I/O API函数使用,因为文件系统将路径和文件名视为一个不透明的WCHAR序列。在执行应用程序所需的任何规范化时,应考虑到这一点,即对相关Windows文件I/O API函数的任何调用的外部性

使用API创建目录时,指定的路径不能太长,以至于不能附加8.3文件名,也就是说,目录名不能超过MAX_path减12

shell和文件系统有不同的要求。可以使用Windows API创建shell用户界面无法正确解释的路径

在Windows 10、版本1607及更高版本中启用长路径

从Windows10版本1607开始,已从常见的Win32文件和目录函数中删除了MAX_路径限制。但是,您必须选择新的行为

要启用新的长路径行为,必须满足以下两个条件:

注册表项HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathEnabled Type:REG\u DWORD必须存在并设置为1。在第一次调用受影响的Win32文件或目录函数后,每个进程的系统都会缓存该键的值。有关函数列表,请参见下文。在进程的生存期内,不会重新加载注册表项。为了让系统上的所有应用程序识别密钥的值,可能需要重新启动,因为某些进程可能在设置密钥之前已经启动。 注

这 也可以通过组策略在“计算机配置”>“管理模板”>“系统”>“文件系统”>“启用NTFS长路径”中控制注册表项

应用程序清单还必须包含longPathAware元素

<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings xmlns:ws2="https://schemas.microsoft.com/SMI/2016/WindowsSettings">
        <ws2:longPathAware>true</ws2:longPathAware>
    </windowsSettings>
</application>
如果选择长路径行为,则这些目录管理函数不再具有MAX_路径限制:CreateDirectoryW、CreateDirectoryExW GetCurrentDirectoryW RemoveDirectoryW SetCurrentDirectoryW

如果选择长路径行为,则这些文件管理功能不再具有最大路径限制:CopyFileW、CopyFile2、CopyFileExW、CreateFileW、CreateFile2、CreateHardLinkW、CreateSymbolicClinkW、DeleteFileW、FindFirstFileW、FindFirstFileExW、GetFileAttributesW、GetFileAttributesW、SetFileAttributesW、,GetFullPathNameW、GetLongPathNameW、MoveFileW、MoveFileExW、MoveFileWithProgressW、ReplaceFileW、SearchPathW、FindFirstFileNameW、FindFirstStreamW、FindFirstStreamW、GetCompressedFileIzew、GetFinalPathNameByHandleW

请注意,尽管那篇文章说组策略编辑器的设置是启用NTFS长路径,但情况不再如此;现在已启用Win32长路径:

如果你真的是指文件名,我相信限制通常仍然是255个字符,请参阅第三段引用的Windows API有很多。。。下面

如果您指的是文件路径:您可以启用Win32长路径选项。发件人:

最大路径长度限制

在Windows API中,除以下段落中讨论的一些例外情况外,路径的最大长度为MAX_path,定义为260个字符。本地路径按以下顺序构造:驱动器号、冒号、反斜杠、由反斜杠分隔的名称组件和终止的空字符。例如,驱动器D上的最大路径是D:\256个字符的路径字符串,其中表示当前系统代码页的不可见终止空字符。此处使用的字符<>是为了清晰可见,不能作为有效路径字符串的一部分

Windows API中的文件I/O函数将转换为\作为将名称转换为NT样式名称的一部分,但使用\\?\前缀时除外,详见以下章节

Windows API有许多函数,这些函数也有Unicode版本,允许扩展长度路径的最大总路径长度为32767个字符。这种类型的路径由反斜杠分隔的组件组成,每个组件的最大值为GetVolumeInformation函数的lpMaximumComponentLength参数中返回的值。此值通常为255个字符。要指定扩展长度路径,请使用\\?\前缀。例如,\\?\D:\非常长的路径

32767个字符的最大路径是近似值,因为系统在运行时可能会将\\?\前缀扩展为更长的字符串,并且此扩展适用于总长度

\\?\前缀也可用于根据通用命名约定UNC构造的路径。要使用UNC指定这样的路径,请使用\\?\UNC\前缀。例如,\\?\UNC\server\share,其中server是计算机的名称,share是共享文件夹的名称。这些前缀不作为路径本身的一部分使用。它们表示应该通过最小修改将路径传递给系统,这意味着您不能使用正斜杠表示路径分隔符,或使用句点表示当前目录,或使用双点表示父目录。由于不能将\\?\前缀与相对路径一起使用,因此相对路径始终限制为最多\u个路径字符

不需要对路径和文件名字符串执行任何Unicode规范化,以供Windows文件I/O API函数使用,因为文件系统将路径和文件名视为一个不透明的WCHAR序列。在执行应用程序所需的任何规范化时,应考虑到这一点,即对相关Windows文件I/O API函数的任何调用的外部性

使用API创建目录时,指定的路径不能太长,以至于不能附加8.3文件名,也就是说,目录名不能超过MAX_path减12

shell和文件系统有不同的要求。可以使用Windows API创建shell用户界面无法正确解释的路径

在Windows 10、版本1607及更高版本中启用长路径

从Windows10版本1607开始,已从常见的Win32文件和目录函数中删除了MAX_路径限制。但是,您必须选择新的行为

要启用新的长路径行为,必须满足以下两个条件:

注册表项HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathEnabled Type:REG\u DWORD必须 ist并将其设置为1。在第一次调用受影响的Win32文件或目录函数后,每个进程的系统都会缓存该键的值。有关函数列表,请参见下文。在进程的生存期内,不会重新加载注册表项。为了让系统上的所有应用程序识别密钥的值,可能需要重新启动,因为某些进程可能在设置密钥之前已经启动。 注

此注册表项还可以通过计算机配置>管理模板>系统>文件系统>启用NTFS长路径中的组策略进行控制

应用程序清单还必须包含longPathAware元素

<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings xmlns:ws2="https://schemas.microsoft.com/SMI/2016/WindowsSettings">
        <ws2:longPathAware>true</ws2:longPathAware>
    </windowsSettings>
</application>
如果选择长路径行为,则这些目录管理函数不再具有MAX_路径限制:CreateDirectoryW、CreateDirectoryExW GetCurrentDirectoryW RemoveDirectoryW SetCurrentDirectoryW

如果选择长路径行为,则这些文件管理功能不再具有最大路径限制:CopyFileW、CopyFile2、CopyFileExW、CreateFileW、CreateFile2、CreateHardLinkW、CreateSymbolicClinkW、DeleteFileW、FindFirstFileW、FindFirstFileExW、GetFileAttributesW、GetFileAttributesW、SetFileAttributesW、,GetFullPathNameW、GetLongPathNameW、MoveFileW、MoveFileExW、MoveFileWithProgressW、ReplaceFileW、SearchPathW、FindFirstFileNameW、FindFirstStreamW、FindFirstStreamW、GetCompressedFileIzew、GetFinalPathNameByHandleW

请注意,尽管那篇文章说组策略编辑器的设置是启用NTFS长路径,但情况不再如此;现在已启用Win32长路径:


路径组件目录或文件名的最大长度通常为255,但在外部存储CD-ROM、FAT-16软盘等的某些文件系统上可能更短。。唯一确定的方法就是打电话。此函数将最大组件报告为DWORD,但Windows当前限制为255

完整路径的最大长度各不相同:

人们常说的极限是260,它来自于MAX_路径常数。这是Windows 95/98/ME上的绝对限制

在系统上,当使用特殊前缀调用内核32中低级文件系统函数的Unicode版本时,可能会出现此限制。前缀为\\?\的路径直接传递给NT API。执行此操作时不支持相对路径。这些路径限制在大约32.000个字符以内,这个限制来自Windows内核中使用的字符串格式

尽管这种方法已经支持了25年,但大多数Windows仍然限于MAX_路径。shell/Explorer在很多地方都有这个限制,CreateProcess也有这个限制

Windows 10增加了对长度超过MAX_PATH且不带特殊前缀的路径的支持。只有当应用程序在其清单中选择了此行为并且系统上启用了启用Win32长路径时,才会激活此支持


shell/Explorer中的大多数最大路径限制已在Windows 10中删除。

路径组件目录或文件名的最大长度通常为255,但在外部存储CD-ROM、FAT-16软盘等的某些文件系统上可能更短。。唯一确定的方法就是打电话。此函数将最大组件报告为DWORD,但Windows当前限制为255

完整路径的最大长度各不相同:

人们常说的极限是260,它来自于MAX_路径常数。这是Windows 95/98/ME上的绝对限制

在系统上,当使用特殊前缀调用内核32中低级文件系统函数的Unicode版本时,可能会出现此限制。前缀为\\?\的路径直接传递给NT API。执行此操作时不支持相对路径。这些路径限制在大约32.000个字符以内,这个限制来自Windows内核中使用的字符串格式

尽管这种方法已经支持了25年,但大多数Windows仍然限于MAX_路径。shell/Explorer在很多地方都有这个限制,CreateProcess也有这个限制

Windows 10增加了对长度超过MAX_PATH且不带特殊前缀的路径的支持。只有当应用程序在其清单中选择了此行为并且系统上启用了启用Win32长路径时,才会激活此支持


shell/Explorer中的大多数最大路径限制已在Windows 10中删除。

它以前是256字节_MAX_path当你说文件名长度时,你真的是指名称还是路径?@T.J.Crowder目前我对文件名更感兴趣,因为路径的长度是一个有用的信息,可以使用256字节_MAX_path当你说文件名长度时,你真的是指名称还是路径?@T.J.Crowder目前我对文件名更感兴趣,因为路径的长度是
这是一个非常有用的信息!您知道Windows Server是否也一样吗?@Philippe-有关更多详细信息,请参阅更新的答案。我不知道Windows Server;Windows Server的最新版本是Windows Server,版本1903 10.0.18362,这表明它是Windows 10,并且在相关的最低版本之后提供支持。各位非常感谢您的回答,有关路径组件最大长度的参考,请参阅。最后一点指出[e]每个路径名组件的长度不得超过255个字符。NT驱动程序API的最大文件名长度为256,单位为km/wdm.h。在Windows API中,我熟悉的限制是MAX_PATH 260,来自cFileName,而不是中的路径。太棒了!您知道Windows Server是否也一样吗?@Philippe-有关更多详细信息,请参阅更新的答案。我不知道Windows Server;Windows Server的最新版本是Windows Server,版本1903 10.0.18362,这表明它是Windows 10,并且在相关的最低版本之后提供支持。各位非常感谢您的回答,有关路径组件最大长度的参考,请参阅。最后一点指出[e]每个路径名组件的长度不得超过255个字符。NT驱动程序API的最大文件名长度为256,单位为km/wdm.h。在Windows API中,我所熟悉的限制是MAX_PATH 260,从cFileName开始不是中的路径。理论上,根据[MS-FSCC],文件系统控制代码和数据结构规范,路径组件不得超过255个字符。根据NT,限制为最大文件名长度256。实际上是255,因为这是最大缓冲区大小,为可选的空值留出空间。例如,FindFirstFile调用NtQueryDirectoryFile[Ex]。如果后者的文件名参数超过255个字符,则后者将失败,并显示STATUS_INVALID_参数。这与文件系统无关,也就是说,它在未向文件系统发送请求的情况下失败。请注意,即使在Windows 10中启用了长路径,但如果隐式继承的当前目录(即lpCurrentDirectory)的路径长度为NULL超过MAX_path-2 258,CreateProcessW也会失败,并返回错误\u INVALID_参数。经典的当前目录限制为258个字符,以便为后面的反斜杠和终止null留出空间。显然,它假定目标可执行文件不支持长路径,而不是检查其清单。这是一个不明显的错误,因为传递给CreateProcessW的参数没有一个明显无效。@ErykSun感谢您的出色更正。根据[MS-FSCC],文件系统控制代码和数据结构的规范,理论上应该超过255个字符-路径组件不能超过255个字符。根据NT,限制为最大文件名长度256。实际上是255,因为这是最大缓冲区大小,为可选的空值留出空间。例如,FindFirstFile调用NtQueryDirectoryFile[Ex]。如果后者的文件名参数超过255个字符,则后者将失败,并显示STATUS_INVALID_参数。这与文件系统无关,也就是说,它在未向文件系统发送请求的情况下失败。请注意,即使在Windows 10中启用了长路径,但如果隐式继承的当前目录(即lpCurrentDirectory)的路径长度为NULL超过MAX_path-2 258,CreateProcessW也会失败,并返回错误\u INVALID_参数。经典的当前目录限制为258个字符,以便为后面的反斜杠和终止null留出空间。显然,它假定目标可执行文件不支持长路径,而不是检查其清单。这是一个不明显的错误,因为传递给CreateProcessW的参数没有一个明显无效。@ErykSun感谢您的出色更正。