哪些字符对ZIP文件中的文件夹名称无效?

时间:2013-12-12 09:20:16

标签: c# windows directory console-application

这是情景。

我正在调用一个数据库并拉入大约3000条父记录的子节点记录,这些子节点我正在树上工作以生成一个平面文件夹名称,如下所示:

  

娱乐类别〜艺术娱乐〜书法艺术家〜惠美 - 日本书法艺术家苏塞克斯~6546

从父母一直到孩子,然后是孩子ID。

然后我做的是迭代这些文件夹名称并使用名称创建一个新文件夹,这一切正常,我正在使用Path.GetInvalidFileNameChars通过循环运行名称以删除任何字符防止文件夹创建失败。

然而,当使用Windows中的内置zip功能(右键单击>发送到>压缩的zip文件夹)来压缩这些文件夹时,我不断收到错误:

  

[文件夹名称]无法压缩,因为它包含无法在压缩文件夹中使用的字符,例如[foo]。您应该重命名此文件或目录。

如果错误消息实际告诉我文件夹名称中不包含的字符范围但没有,那就没关系了,所以每当我对字符进行替换时,我会在错误中弹出一个新的字符消息,这就是我现在要清理文件夹名称的行为:

private static void CleanPath(StringBuilder path)
{
    List<string> invalidFolderCharacters = Path.GetInvalidFileNameChars()
                                           .Select(x => x.ToString()).ToList();
    invalidFolderCharacters.Add("–");
    invalidFolderCharacters.Add("`");
    invalidFolderCharacters.Add("\'");
    invalidFolderCharacters.Add("′");

    foreach (string s in invalidFolderCharacters)
    {
         path.Replace(s, string.Empty);
    }
}

正如您所看到的,每次弹出新错误时,我都必须添加GetInvalidFileNameChars()返回的字符。

所以我的问题是 - 我可以使用.NET框架中的内置函数,它将为我提供文件/文件夹名称中不允许的字符以及不能在压缩文件夹名称中的字符?谁能告诉我压缩文件夹名称中不允许使用哪些字符,以便我自己创建一个?

3 个答案:

答案 0 :(得分:4)

还有一种名为Path.GetInvalidPathChars

的方法

答案 1 :(得分:0)

您可能收到此消息的一个原因是Unicode字符。但是,尝试从程序中确定字符串是否为Unicode将是一个挑战。见IsTextUnicode function

我会尝试PInvoke原生https://stackoverflow.com/a/4459679/2596334

这里还有其他一些建议:
https://stackoverflow.com/a/1522897/2596334
setJmxName()

答案 2 :(得分:-1)

这是从我编写的JavaScript项目中提取的,该项目最初是从this Wikipedia article编译的:

var contain = ['"', '*', ':', '<', '>', '?', '\\', '/', '|', '+', '[', ']'];
var fullname = ['AUX', 'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9', 'CON', 'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9', 'NUL', 'PRN'];

文件名不能包含第一个var中的任何字符,并且不能与中的任何名称​​完全相同与第二个{{ 1}}。