有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

编辑:

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

那么你知道会不会有一些豁免File file = new File(jsonFile);?谢谢你,我可能会在捕获中处理


共 (2) 个答案

  1. # 1 楼答案

    如果你真的是指filename,我相信限制仍然是“通常”255个字符,请参见第三段(“Windows API有很多…”)如下

    如果您指的是文件路径:您可以启用“Win32长路径”选项。从this Microsoft document

    Maximum Path Length Limitation

    In the Windows API (with some exceptions discussed in the following paragraphs), the maximum length for a path is MAX_PATH, which is defined as 260 characters. A local path is structured in the following order: drive letter, colon, backslash, name components separated by backslashes, and a terminating null character. For example, the maximum path on drive D is "D:\some 256-character path string<NUL>" where "<NUL>" represents the invisible terminating null character for the current system codepage. (The characters < > are used here for visual clarity and cannot be part of a valid path string.)

    Note

    File I/O functions in the Windows API convert "/" to "\" as part of converting the name to an NT-style name, except when using the "\\?\" prefix as detailed in the following sections.

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

    Note

    The maximum path of 32,767 characters is approximate, because the "\\?\" prefix may be expanded to a longer string by the system at run time, and this expansion applies to the total length.

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

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

    使用API创建目录时,指定的路径不能太长,以至于不能附加8.3文件名(即,目录名不能超过MAX\u path减去12)

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

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

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

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

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

    Note

    This registry key can also be controlled via Group Policy at Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long paths.

    • 应用程序清单还必须包含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_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、FindFirstStreamW、FindFirstStreamW、GetCompressedFileIzew、GetFinalPathNameByHandleW

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

    enter image description here

  2. # 2 楼答案

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

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

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

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

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

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

    shell/Explorer中的大多数MAX_PATH限制已在Windows 10中删除