大家好,又见面了,我是你们的朋友全栈君。
参考:https://fresky.github.io/2015/10/13/story-about-windows-file-name/
参考:https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#maximum-path-length-limitation
win7环境通常模式下:
path+filename: 260个长度是作为文件目录长度+文件名的长度限制之和(带结束符‘\0’)。
path: 248个长度是作为文件目录的长度限制(带结束符‘\0’);
filename: 256个长度通常作为文件名称的长度限制(带结束符‘\0’),不算结束符的话为255个字符;
1. 例如-建立文件:path+filename触发限额260
所在文件夹的长度为50,则文件名的长度被限制在210以内,超出的话会被进行截断。
2. 例如-建立文件夹:path触发限额248
在c:\下建立文件夹(目录前缀”c:\”占据3个长度),新建文件夹名称限制在245以内,超出的话会被进行截断。
3. 例如-建立文件:filename触发限额256
在c:\下建立文件(目录前缀”c:\”占据3个长度),新建文件夹名称限制在256以内,超出的话会被进行截断。
如果在程序中的话,超出长度的话MoveFile/CopyFile会返回错误,处理失败。
例子1:建立文件
1. 我手动在C:\建立一个文件,使用280个长度进行重命名,实际生成的文件名长度却是256个长度(带字符串结束符’\0’)
新建时使用280长度(带‘\0’结束符):1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklm.txt
实际生成文件名,共计256个长度(带字符串结束符’\0’):
256长度(带‘\0’结束符):1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz123
2. 把这个文件往”C:\temp”目录copy的时候
报错: 文件名对目标文件夹可能过长,您可以缩短文件名并重试,或者尝试路径较短的位置。
意味着,
a. 要么我们把文件名改短一些,
b. 要么copy 的目录长度短一些,例如向”D:\”复制就没会有问题。
例子2:建立文件夹
1. 我手动在C:\建立一个文件夹,使用280个长度进行重命名,实际生成的文件夹名称却是带字符串结束符’\0’共245个长度
新建时使用280长度(带‘\0’结束符):1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
实际生成目录名称: 共计245个长度(带字符串结束符’\0’)
245长度(带‘\0’结束符):1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr
和父目录“c:\”连接在一起形成的目录长度正好为248长度(带‘\0’结束符)
c:\1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr
2. 在该目录下,再尝试建立目录时,失败-报错建立路径过长
意味着,
a. 总目录长度已经达到了最大限制,不能再往下建立目录
3. 另外,在该目录下新建文件,利用同样字符串,可以建立一个12长度的文件(带‘\0’结束符),超出会被截断
a. 建立的文件名(带’\0’长度12):1234567890a
b. 文件路径前缀(带‘\’长度248) + 文件名长度12 = 260 达到限额
Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125219.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...