代码之家  ›  专栏  ›  技术社区  ›  dbr

makeValidFilename函数的潜在错误?

  •  0
  • dbr  · 技术社区  · 16 年前

    它的灵感来自 "How to make a valid Windows filename from an arbitrary string?" ,我已经编写了一个函数,它将接受任意字符串并使其成为有效的文件名。

    tvnamer -一个实用程序,它获取电视节目的文件名,并对它们进行友好而一致的重命名 http://www.thetvdb.com -虽然源文件名必须是有效的文件,但序列名和集名都会被更正,因此理论上两者都可以包含任何字符。我更关心的不是安全性,而是可用性——这主要是为了防止文件被重命名 .some.series - [01x01].avi 和文件“消失”(而不是阻止邪恶的人)

    • 文件系统支持Unicode文件名。HFS+和NTFS都有,这将覆盖大多数用户。还有一个 normalize_unicode 参数来去掉Unicode字符(在tvnamer中,这是通过配置XML文件设置的)
    • 平台要么是达尔文,要么是Linux,其他的都被当作Windows处理
    • .bashrc )-修改代码以允许 .abc

    我(希望)处理过的事情:

    • . (防止文件名 . ..
    • 删除目录分隔符: / 在Linux上,以及 : 在OS X上
    • \/:*?"<>| (在窗户上时,或用 windows_safe=True )
    • 在保留文件名前面加下划线( COM2 变成 _COM2 , NUL 变成 _NUL
    • Ã¥ 变成 a 和不可转换字符被删除
    • 在Linux/Darwin上截断超过255个字符的文件名,在Windows上截断超过32个字符的文件名

    代码和一堆测试用例可以在 http://gist.github.com/256270 in tvnamer/utils.py

    这个函数有什么错误吗?我错过了什么条件?

    1 回复  |  直到 9 年前
        1
  •  1
  •   Dominik Weber    15 年前

    我注意到一点:在NTFS下,有些文件不能在特定的目录中创建。 E、 根目录中的G.$Boot