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

7 filesystems escaping

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

AC?¿!$"Man'@
Run Code Online (Sandbox Code Playgroud)

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

Jac*_*cob 10

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

  • 为什么downvote,匿名用户?我仍然相信这是一个更好的解决方案.否则,Bobby \和Bobby /都将获得相同的目录,这将导致冲突. (3认同)
  • 嗯,我认为人们主要去Stack Overflow寻找他们问题的解决方案,而不仅仅是回答问题.如果某人提出错误的问题,比如"我如何用正则表达式解析这个HTML",最好指出方法中的缺陷. (2认同)

sch*_*der 6

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


Dan*_*Dan 4

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

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

  • 另请注意,虽然 GetInvalidPathChars() 返回无效字符,但它不一定返回所有无效字符。Quote: “不能保证从此方法返回的数组包含文件和目录名称中无效的完整字符集。” (4认同)