各种系统路径和文件名长度的最大限制

Linux

在Linux系统下,可以查看limits.h头文件里面有针对NAME和PATH的最大长度限制:

#ifndef _LINUX_LIMITS_H
#define _LINUX_LIMITS_H

......

#define NAME_MAX         255	/* # chars in a file name */
#define PATH_MAX        4096	/* # chars in a path name including nul */

......

#endif

Windows

 默认的系统路径的限制长度是260,文件名的长度最大不超过255【可能是因为盘符和结尾的NUL字符的缘故吧^_^】,不过从Windows 10 build 14352之后,就可以设置启用enable NTFS long paths 来打破路径最大长度是260的限制。开启的方法是:打开注册表,修改Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled (Type: REG_DWORD) 为1,就可以打破260的长度限制。也可以参考Maximum Path Length Limitation - Win32 apps | Microsoft Docs

修改之后,最大路径为 32,767 个字符是近似路径,因为系统可能会运行时将"?" 前缀扩展为较长的字符串,并且此扩展适用于总 \ \ \ 长度。"?" 前缀还可与根据 UNC 规则的通用命名约定构造 (\ \ \ 路径) 。 若要使用 UNC 指定此类路径,请使用 \ \ "?" \UNC \ " 前缀。 例如 \ \ ,"?" \UNC \ \ 服务器共享",其中"server"是计算机的名称,"share"是共享文件夹的名称。 这些前缀不用作路径本身的一部分。 它们指示路径应该以最小修改方式传递给系统,这意味着不能使用正斜杠来表示路径分隔符,不能使用一个表示当前目录的周期,或者使用双点表示父目录。 由于不能将 \ \ "?" 前缀用于相对路径,因此相对路径始终限制为 \ MAX _ PATH 字符总数。具体可以参考:最大路径长度限制 - Win32 apps | Microsoft Docs

当文件名达到最大长度时,如果在本路径下复制并且粘贴此文件,系统会截取一部分文件名然后再在尾部加上【 - 副本】,例如:文件名:ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

复制粘贴之后, 变成:

dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd - 副本

一个比较奇怪的现象是:开启了长文件名之后,在根路径下,文件名的最大长度是245【纯字符】,而找一个文件夹再创建一个长文件名,最大长度却可以到达254【纯字符个数】,不知道是何解?

MAC

跟linux类似可以查看syslimits.h,也可以直接参考:syslimits.h

查看的结果如下:

 文件名最大长度是255, 路径最大长度是:1024.

最后,各个操作系统的最大文件名和路径长度总结如下:

操作系统文件名最大长度路径最大长度
Linux2554096
MAC2551024
Windows不开启长文件名255260
开启长文件名25532767
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值