我想在 tmpfs(在 CentOS 6.5 下)中创建一个文件,如下所示:
fpath = '/tmpfs_mounted/with/long/file/name'
with open(fpath, 'w') as fd:
write(somedata)
...
但是我得到了IOError: [Errno 36] File name too long: ...
错误,如何解决它?
好,我知道了。Linux 确实有 256 字节的基本名称限制,请参阅此处以获取所有限制的完整列表。一个简单的代码可以验证:
# -*- encoding:utf8 -*-
import os
if __name__ == '__main__':
base = 'x'
basename = ''
while 1:
basename += base
try:
with open(basename, 'w') as fd:
os.remove(basename)
except Exception as ex:
print('length %d failed' % len(basename))
break
当我将GBK编码的文件名复制到Tmpfs时遇到问题,我将GBK文件名转换为UTF8,然后长度改变了:
>>> s = u'中'
>>> len(s.encode('gbk'))
>>> 2
>>> len(s.encode('utf8'))
>>> 3
因此,utf8 文件名可能超过 255 个字节。