首页 > 其他分享 >File name too long 的bug,File name too long,文件名过程,文件路径问题

File name too long 的bug,File name too long,文件名过程,文件路径问题

时间:2024-03-04 12:33:37浏览次数:20  
标签:name 文件名 路径 long 260 too 个字符 255

首先,先说一下遇到问题的背景;我们公司需要上报一些文件,不限制格式;而且对于大于50M的文件pdf,压缩包等必须拆分和重命名;从开发到测试和目前的运行一直没有问题;最近在正常下载和上报时发现了个别文件没有下载下来;通过排查日志发现报下面的错;

 原来是文件名太长了,通过查询资料了解到原来操作系统对这些都做了限制;而且每个版本可能都会存在不同的限制;

在 Windows API ((以下段落) 中介绍的一些例外情况)中,路径的最大长度为 MAX_PATH,定义为 260 个字符。 本地路径按以下顺序构建:驱动器号、冒号、反斜杠、用反斜杠分隔的名称组件以及终止 null 字符。 例如,驱动器 D 上的最大路径为“D:\some 256 个字符的路径字符串<NUL>”,其中“<NUL>”表示当前系统代码页的不可见终止 null 字符。 (此处使用的字符 <> 是为了直观明了,不能是有效路径 string 的一部分。)

例如,如果将具有长文件名的 git 存储库克隆到本身具有长名称的文件夹,则可能会达到此限制。

详细资料大家可以查阅:https://learn.microsoft.com/zh-cn/windows/win32/fileio/maximum-file-path-limitation?tabs=registry

操作系统文件名最大长度(字节)路径最大长度
Linux 255 4096
MAC 255 1024
Windows(未开启长文件名) 255 260
Windows(开启长文件名) 255 32767

 

上面的图例大家可以参考,具体可能还需要根据自身装的系统进行详细的查询。

详细说明:

1、linux

Linux的 /usr/include/linux/limits.h 中做出了说明

#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

 

这些限制在Linux系统下可以通过修改系统内核修改这个限制。

Linux文件名和目录的长度限制是255个字符(字节,linux中所说的字符是以ascii码来编码的)

 

2 windows

Windows 通常限定文件名最多包含 260 个字符(一个汉字占用两个字符哦)。但实际的文件名必须少于这一数值,因为完整路径(如 C:\Program Files\filename.txt)都包含在此字符数值中。
windows下完全限定文件名必须少于260个字符,目录名必须小于248个字符。(包含目录文件夹)
win7x64位环境:
260个长度是作为总的文件名长度限制。
如果在程序中的话,超出长度的话MoveFile/CopyFile会返回错误,处理失败。

                        

3 mac

文件名最长255字节(包含扩展名),路径最长:1024

既然来了,那就认识下,扫描关注下日后多交流!

 

标签:name,文件名,路径,long,260,too,个字符,255
From: https://www.cnblogs.com/wwwcf1982603555/p/18051566

相关文章

  • 使用gradio启动web-ui时出现cannot import name 'RootModel' from 'pydantic'
    使用gradio启动web-ui时出现cannotimportname'RootModel'from'pydantic'出现该报错的原因:pydantic版本与gradio版本不对应。例:我使用的pydantic版本为1.10.14,报错时gradio的版本是最新版4.19.2。找到gradiogithub源码中的requirements.txt:aiofiles>=22.0,<24.0altair>=......
  • MaterialDesignInXamlToolkit 5.0 发布
    5.0.0发布这是一个重大版本更新,又许多破坏性变化升级到5.0.0版本,请参考:https://www.cnblogs.com/sesametech-dotnet/p/18028565变化关键性变化Allowfortransparentcolorsforgeneratediconsby@Kebooin#3273AddnewoptionstotheExpanderAssistclassby@Abd......
  • Python 中的 if __name__ == '__main__' 该如何理解
    结论if__name__=='__main__'我们简单的理解就是:如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行。程序入口对于很多编程语言来说,程序都必须要有一个入口,比如C,C++,以及完全面向对象的编程语言Java,C#等。如果你接触过这些语言,对于程序入口这个概......
  • 将Opencv的namedWindow( )函数创建的窗口插入显示在应用程序窗口客户区
    1、使用Opencv的namedWindow(WND_NAME,nFlag)//WND_NAME为窗口的名称 nFlag填入图模式有4种2、resizeWindow(wnd_name,宽,高)设置图片窗口的高、宽,3、根据窗口名hPicWnd= FindWindow(NULL,wnd_name)取得显示图片窗口的句柄  4、SetParent(hPicWnd ,应用......
  • Office tool plus 下载&安装教程
    part1下载1在浏览器中搜索Officetoolplus,并且找到官网如图:点击下载你会看到以下界面:图:我们可以选择山东大学镜像站的下载链接这里需要看你的电脑是64位,还是32位我们可以回到桌面,右键此电脑或者是计算机点击属性,就可查看。注意:x64就是64位操作系统,x86就是......
  • C# NamedPipe传输测试
    CancellationTokenSourcects=newCancellationTokenSource();CancellationTokentoken=cts.Token;Tasktserver=Task.Run(()=>{ NamedPipeServerserver=newNamedPipeServer(); server.dowork(token); });Tasktclient=Task.Run(()=>{ Named......
  • Vuex系列之(六)Vuex Devtools
    VuexDevtools由于Vue和Vuex都是由官方团队开发的,Vue的Devtools和Vuex的Devtools是合二为一的组件页签、Vuex页签、事件页签事件页签:观察自定义事件和全局事件总线中的事件VuexDevtools仅仅捕获mutations中的动作,actions中的动作是不会捕获的context:actions中的上下文......
  • Error creating bean with name 'XXX': Bean with name 'senseOneToSomeFeignImpl' ha
    关于Spring框架中的循环依赖问题,您可以尝试以下几种方法来解决:重新定义Bean依赖:重构代码以消除循环依赖。这可能涉及重新设计类,使它们不相互依赖即可运行。使用Setter注入:与构造函数注入相比,使用setter注入。Spring可以更好地处理setter注入的循环依赖,因为对象引用是在对象构造......
  • CF510C Fox And Names 题解
    CF510CFoxAndNames题解https://www.luogu.com.cn/problem/CF510C思路题意就是:确定一个小写字母的比较规则,使得给定的所有字符串在一开始就是按你确定的比较规则排序了的。可以发现:对于前后一对字符串,找到第一对不同的字符,是要这两个字符有合法的大小关系,就能满足题意。......
  • 【STL和泛型编程】3. set、map分析(及typename起源)
    前置知识:红黑树原理 【数据结构】7.平衡搜索树(AVL树和红黑树),红黑树的平衡性有利于search和insert红黑树的迭代器begin()左侧end()右侧迭代顺序56781011121315不能使用迭代器修改Key的值,例如将6改成50会破坏红黑树的性质1.RB-tree在g++编译......