【发布时间】:2009-06-20 05:27:35
【问题描述】:
我允许用户选择他想要的任何用户名,它可以是任何用户名,例如
AC♀¿!$"Man'@
现在我需要为他创建一个目录。我用什么函数来转义文本,这样我就不会出现 FS 问题/异常?
【问题讨论】:
标签: filesystems escaping
我允许用户选择他想要的任何用户名,它可以是任何用户名,例如
AC♀¿!$"Man'@
现在我需要为他创建一个目录。我用什么函数来转义文本,这样我就不会出现 FS 问题/异常?
【问题讨论】:
标签: filesystems escaping
无论是替换无效字符还是删除它们,都存在冲突的可能性。如果我是你,我会为用户设置一个单独的主键(也许是一个 GUID)并将其用作目录名称。这样您就可以使用任何您想要的用户名,而不必担心无效的目录名称。
【讨论】:
根据您的字符是否为 ASCII/Unicode,您可以使用字节/字符值作为替换,并使用一些字符来标记这些替换的字符(如下划线),为您提供类似 _001_255_200ValidPart_095_253 的内容。请注意,您也必须替换标记字符(在示例中为_095,95 是下划线的 ASCII 码)。
【讨论】:
使用Path.GetInvalidFileNameChars 或Path.GetInvalidPathChars 检查要删除的字符。
http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidfilenamechars.aspx
【讨论】:
我认为您最好的选择是创建一个将无效文件系统字符映射到有效替换字符串的字典。然后扫描字符串中的无效字符,随时替换为有效字符串。这将允许用户选择他们想要的任何内容,并让您在需要时将其转换回用户名。
【讨论】:
您不会找到一种方法来逃避用户名,从而在每个实例中都提供一个有效的非冲突目录名称。
更可靠的方法是使用任意约定创建目录,然后存储两者之间的映射。这也为您的用户想要更改名称的情况提供支持。
查看问题 #663520 了解更多信息。
【讨论】:
用户是否需要知道他/她的目录的确切名称?如果没有,为什么不使用任意规则创建目录并将每个目录与数据库中的所有者相关联?
【讨论】: