2

我想在 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: ...错误,如何解决它?

4

1 回答 1

1

好,我知道了。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 个字节。

于 2016-06-23T08:14:29.153 回答