如何在多个FS上的文件名中转义无效字符

时间:2010-02-03 19:25:09

标签: .net filesystems escaping

如何在文件名中转义无效字符?我ask this question once before并用解决方案写了一堂课。现在我想扩展它。我的网站将能够检测用户所使用的操作系统。所以基于我要么1)想要基于用户所在的FS / OS逃生或2)逃避它以便它适用于所有文件系统。

哪些字符可能在Windows 7或Linux上有效(我不确定我当前的Linux FS设置为什么)在XP上无效或在Windows或Mac上有效而在linux上无效?

2 个答案:

答案 0 :(得分:1)

是否会向用户显示目录名称,如果是,是否需要看起来像用户名(基于其他问题中的信息)?如果没有,您可以将其拆分为字符数组,将每个字符的值转换为十六进制表示形式,并将它们放在一个字符串中。这应该适用于任何文件系统。

private static string ToHexString(string input)
{
    return string.Join("", input.ToCharArray()
        .Select(c => string.Format("{0:x}", (int)c))
        .ToArray());
}

答案 1 :(得分:0)

解决方案

  1. 将它们设为[A-Za-z._-]并转义不属于范围的字符
  2. 选择您支持的操作系统和FS,找出哪些是非法的,并支持这些,直至另行通知