Windows文件名长度限制

QT&MFC 专栏收录该内容
90 篇文章 1 订阅

参考:https://social.technet.microsoft.com/Forums/windows/en-US/53779044-d453-458b-b8c4-96d41711ea69/file-name-too-long-cannot-copy?forum=w7itprogeneral

参考: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  转载请标明来源 

 

  • 3
    点赞
  • 5
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值