C#: 从文件名字符串中删除非法字符

3
为什么这段代码没有任何作用,输出与输入完全相同?我感到困惑!!!
string name = ";;;'']][[ zion \\\[[[]]]"  
char[] invalidChars = System.IO.Path.GetInvalidPathChars();
string invalidString = Regex.Escape(new string(invalidChars));

string valid = Regex.Replace(name, "[" + invalidString + "]", "");

你似乎错误地发布了字符串'name'... - Mitch Wheat
3个回答

6

编辑:

我认为这可能只是测试数据不完整的情况(还有其他人建议的函数更改)。请尝试以下内容:

string name = "tru\\e.jpg";
char[] invalidChars = System.IO.Path.GetInvalidFileNameChars();
string invalidString = Regex.Escape(new string(invalidChars));
string valid = Regex.Replace(name, "[" + invalidString + "]", "");
Console.WriteLine(valid);

我得到了“true.jpg”的输出。在生产中使用之前,我强烈建议进行更多的测试! :)

4
您说的“它不会做任何事情”是什么意思?我在控制台应用程序中运行了以下内容:
string name = ";;;'']][[ zion \\\\[[[]]]";
char[] invalidChars = System.IO.Path.GetInvalidPathChars();
string invalidString = Regex.Escape(new string(invalidChars));

string valid = Regex.Replace(name, "[" + invalidString + "]", "");
Console.WriteLine(valid);

顺便提一下,您的语法是错误的,有一些未转义的字符并且缺少了一个分号。

我得到了以下结果。

;;;'']][[ zion \\[[[]]]

哪个是正确的结果。也许你应该提出一个新问题,关于你想做什么,因为你目前的方法似乎表明你对正则表达式的理解不够深刻。

更新: 你是在尝试检查文件名吗?如果是这样,你可能想使用:

System.IO.Path.GetInvalidFileNameChars();

更新:以下是来自方法GetInvalidPathChars()的无效字符列表。

RealInvalidPathChars = new char[] { 
        '"', '<', '>', '|', '\0', '\x0001', '\x0002', '\x0003', '\x0004', '\x0005', '\x0006', '\a', '\b', '\t', '\n', '\v', 
        '\f', '\r', '\x000e', '\x000f', '\x0010', '\x0011', '\x0012', '\x0013', '\x0014', '\x0015', '\x0016', '\x0017', '\x0018', '\x0019', '\x001a', '\x001b', 
        '\x001c', '\x001d', '\x001e', '\x001f'
     };

基本上,以下是无效的路径字符,可能包括ASCII / Unicode字符1到31,以及引号("),小于(<),大于(>),管道(|),退格(\b),空值(\0)和制表符(\t)。

这些字符似乎都没有出现在您的原始字符串中。


字符串“valid”与“name”相同。 - zion
他正在尝试做这个的一个变体: http://powershell.com/cs/blogs/tips/archive/2009/06/15/checking-paths-for-invalid-path-characters.aspx - TrueWill
我正在尝试去除所有非法字符。 - zion
1
你所输入的字符串中没有包含无效字符。 - Nick Berardi
1
好的,我正在尝试清理一个包含无效文件名字符的字符串。tru\e.jpg需要被转换为true.jpg。 - zion
1
使用GetInvalidFileNameChars(),那就可以解决它。 - Nick Berardi

4
使用以下方法获取无效文件字符:
char[] invalidChars=System.IO.Path.GetInvalidFileNameChars();

他正在尝试复制http://powershell.com/cs/blogs/tips/archive/2009/06/15/checking-paths-for-invalid-path-characters.aspx,该网站没有使用它。 - Nick Berardi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接