Windows 10中的最大文件名长度是多少?Java会尝试/捕获会低谷exeption?

Phi*_*ppe 1 java windows filenames file

在旧版本的Windows中,我知道文件或文件夹的最大长度约为250个字符,有人知道他们是否在Windows 10中对其进行过更改吗?

编辑:

我正在围绕给定的API进行一些Java代码,以提取应用程序的某些内容,该文件将包含数千个文件,我有点担心会发生什么,因为我不知道文件名和路径是什么样子因此,我将尝试防止这些错误,也许可以在保存之前更改Java中的名称(但最好保留原始名称),

那么您是否知道是否会有一些豁免?File file = new File(jsonFile);?谢谢,我有可能在陷阱中

T.J*_*der 7

如果您的确是文件,那么我相信该限制仍然是“通常” 255个字符,请参见下面引用的第三段(“ Windows API有很多...”)。

如果您的意思是文件路径:可以启用“ Win32长路径”选项。从此Microsoft文档

最大路径长度限制

在Windows API(以下段落讨论了一些例外)中,路径的最大长度为MAX_PATH,它定义为260个字符。本地路径按以下顺序构造:驱动器号,冒号,反斜杠,由反斜杠分隔的名称组件以及终止的空字符。例如,驱动器D上的最大路径是“ D:\some 256-character path string<NUL>”,其中“ <NUL>”表示当前系统代码页的不可见终止空字符。(此处使用字符<>是为了使内容清晰,不能成为有效路径字符串的一部分。)

注意

Windows API中的文件I / O功能在将名称转换为NT样式名称的过程中将/\” 转换为“ ”,除非使用\\?\以下部分中详细说明的“ ”前缀。

Windows API具有许多功能,它们也具有Unicode版本,以允许使用扩展长度的路径,最大总路径长度为32,767个字符。这种类型的路径由用反斜杠分隔的组件组成,每个反斜杠都取决于GetVolumeInformation函数的lpMaximumComponentLength参数中返回的值(该值通常为255个字符)。要指定扩展长度的路径,请使用“ \\?\”前缀。例如“ \\?\D:\very long path”。

注意

最大路径约为32,767个字符,因为系统\\?\可能会在运行时将前缀“ ”扩展为更长的字符串,并且这种扩展适用于总长度。

的“ \\?\”前缀也可以与根据通用命名约定(UNC)构建路径所用。要使用UNC指定这样的路径,请使用“ \\?\UNC\”前缀。例如,“ \\?\UNC\server\share”,其中“服务器”是计算机的名称,“共享”是共享文件夹的名称。这些前缀不用作路径本身的一部分。它们指示路径应该以最小的修改传递给系统,这意味着您不能使用正斜杠来表示路径分隔符,也不能使用句号来表示当前目录,也不能使用双点号来表示父目录。因为您不能在\\?\相对路径中使用“ ”前缀,所以相对路径始终限制为总共MAX_PATH个字符。

无需对Windows文件I / O API函数使用的路径和文件名字符串执行任何Unicode规范化,因为文件系统将路径和文件名视为WCHAR的不透明序列。考虑到应用程序所需的任何规范化,都应在对相关Windows文件I / O API函数的任何调用之外进行。

使用API​​创建目录时,指定的路径不能太长,以至于您无法附加8.3文件名(即,目录名不能超过MAX_PATH减12)。

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

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

从Windows 10版本1607开始,MAX_PATH限制已从常见的Win32文件和目录功能中删除。但是,您必须选择加入新行为。

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

  • 注册表项HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled(类型:REG_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>
    
    Run Code Online (Sandbox Code Playgroud)

如果您选择采用长路径行为,这些目录管理功能将不再具有MAX_PATH限制:CreateDirectoryW,CreateDirectoryExW GetCurrentDirectoryW RemoveDirectoryW SetCurrentDirectoryW。

如果您选择使用长路径行为,这些文件管理功能将不再具有MAX_PATH限制:CopyFileW,CopyFile2,CopyFileExW,CreateFileW,CreateFile2,CreateHardLinkW,CreateSymbolicLinkW,DeleteFileW,FindFirstFileW,FindFirstFileExW,FindNextFileW,GetFileAttributesW,GetFileAttributesExW,SetFileAttributesW GetFullPathNameW,GetLongPathNameW,MoveFileW,MoveFileExW,MoveFileWithProgressW,ReplaceFileW,SearchPathW,FindFirstFileNameW,FindNextFileNameW,FindFirstStreamW,FindNextStreamW,GetCompressedFileSizeW,GetFinalPathNameByHandleW。

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

在此处输入图片说明

  • 有关路径组件的最大长度的参考,请参阅[\ [MS-FSCC \] 2.1.5路径名](https://docs.microsoft.com/zh-cn/openspecs/windows_protocols/ms-fscc/ffb795f3- 027d-4a3c-997d-3085f2332f6f)。最后一点指出“每个路径名组件的长度不得超过255个字符”。NT驱动程序API在“ km / wdm.h”中具有“ MAXIMUM_FILENAME_LENGTH”(256)。在Windows API中,我熟悉的限制是[WIN32_FIND_DATAW`](https://docs.microsoft.com/zh-cn中的cFileName`(不是路径)中的`MAX_PATH`(260)。 / windows / win32 / api / minwinbase / ns-minwinbase-win32_find_dataw)。 (2认同)