文件系统文件名转义? C#

时间:2009-06-20 05:27:36

标签: filesystems escaping

我允许用户选择他想要的任何用户名,它可以是任何内容,例如

AC♀¿!$"Man'@

现在我需要为他创建一个目录。我用什么函数来逃避文本,所以我没有FS问题/异常?

6 个答案:

答案 0 :(得分:10)

无论是替换无效字符还是删除它们,总会有碰撞的可能性。如果我是你,我将为用户提供一个单独的主键(可能是一个GUID),并将其用于目录名称。这样,您就可以拥有自己想要的任何用户名,而无需担心目录名称无效。

答案 1 :(得分:6)

根据您的字符是ASCII / Unicode,您可以使用字节/字符值作为替换,并使用一些字符来标记这些替换字符(如下划线),为您提供类似_001_255_200ValidPart_095_253的内容。请注意,您还必须替换标记字符(示例中为_095,95为下划线的ASCII代码)。

答案 2 :(得分:3)

使用Path.GetInvalidFileNameCharsPath.GetInvalidPathChars检查要删除的字符。

http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidfilenamechars.aspx

答案 3 :(得分:2)

我认为最好的办法是创建一个将无效文件系统字符映射到有效替换字符串的字典。然后扫描字符串中的无效字符,随时替换为有效的字符串。这将允许用户选择他们想要的任何内容并为您提供一致性,以便在需要时将其转换回用户名。

答案 4 :(得分:1)

您不会找到一种方法来转义用户名,该用户名将在每个实例中提供有效的非冲突目录名称。

更可靠的方法是使用一些仲裁约定创建目录,然后在两者之间存储映射。这也为您的用户希望能够更改名称的情况提供支持。

查看问题#663520了解更多信息。

答案 5 :(得分:0)

用户是否需要知道他/她目录的确切名称?如果没有,为什么不使用任意规则创建目录并将每个规则与数据库中的所有者相关联?