Phi*_*ppe 1 java windows filenames file
在旧版本的Windows中,我知道文件或文件夹的最大长度约为250个字符,有人知道他们是否在Windows 10中对其进行过更改吗?
编辑:
我正在围绕给定的API进行一些Java代码,以提取应用程序的某些内容,该文件将包含数千个文件,我有点担心会发生什么,因为我不知道文件名和路径是什么样子因此,我将尝试防止这些错误,也许可以在保存之前更改Java中的名称(但最好保留原始名称),
那么您是否知道是否会有一些豁免?File file = new File(jsonFile);?谢谢,我有可能在陷阱中
如果您的确是文件名,那么我相信该限制仍然是“通常” 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\FileSystemLongPathsEnabled(类型:REG_DWORD)必须存在并将其设置为1。在第一次调用受影响的Win32文件或目录函数之后,系统(每个进程)将缓存该注册表项的值(有关功能列表,请参见下文) 。在该过程的生存期内,将不会重新加载注册表项。为了使系统上的所有应用都能识别密钥的值,可能需要重新启动,因为在设置密钥之前可能已经启动了某些进程。注意
也可以通过“计算机配置”>“管理模板”>“系统”>“文件系统”>“启用NTFS长路径”中的组策略来控制此注册表项。
应用程序清单还必须包含longPathAware元素。
Run Code Online (Sandbox Code Playgroud)<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,FindNextFileNameW,FindFirstStreamW,FindNextStreamW,GetCompressedFileSizeW,GetFinalPathNameByHandleW。
请注意,尽管该文章说组策略编辑器的设置是“启用NTFS长路径”,但情况已不再如此。现在是“启用Win32长路径”:
| 归档时间: |
|
| 查看次数: |
350 次 |
| 最近记录: |