这是情景。
我正在调用一个数据库并拉入大约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框架中的内置函数,它将为我提供文件/文件夹名称中不允许的字符以及不能在压缩文件夹名称中的字符?谁能告诉我压缩文件夹名称中不允许使用哪些字符,以便我自己创建一个?
答案 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}}。