为什么Python对文件名长度小于文件系统限制的文件会报“OSError: [Errno 36] File name too long”的错误?

11
以下代码产生了一个意外的异常:
open("52bbe674cdc81d4140099b84fa69eea4249bcceee75bcbe4838d911ab076547cfdad3c1c5197752a98e5525fe76613dbe52dcdb1a9a397669babce0f101d010142cffa000000.csv", "w")
OSError: [Errno 36] File name too long: '52bbe674cdc81d4140099b84fa69eea4249bcceee75bcbe4838d911ab076547cfdad3c1c5197752a98e5525fe76613dbe52dcdb1a9a397669babce0f101d010142cffa000000.csv'

这很意外,因为我的文件系统是ext4,根据维基百科的说法,它有一个255个字节的文件名长度限制。 上述文件名的长度为144个字节。

那么为什么Python会在实际上未超过文件名长度限制时引发此异常?


在我的Python 3.5和ext4上运行良好。 - Remi Guan
1
在我的2.7和3.4上可以运行,你用的是什么操作系统? - Padraic Cunningham
Fedora 20,Python 3.3.2 - Josh Hansen
1个回答

18

我找到了一个解决方案。原来我不是在处理纯的ext4文件系统——它实际上是在之前Ubuntu安装中遗留下来的ecryptfs(一种加密文件系统)之上建立的。如这个相关问题中未被接受的回答所建议的那样,ecryptfs层对文件名长度施加了143个字符的限制。您可以在这里找到关于ecryptfs下文件名长度限制的确定性答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接