清除路径和文件名中的非法字符
本编程示例的任务是从字符串中去除无效的路径和文件字符,且不产生错误。虽然给定的代码旨在解决这个问题,但它似乎无效。让我们分析一下缺失的部分:
代码使用 Trim
方法试图从字符串中删除非法字符。但是,Trim
只能删除字符串开头和结尾的空白字符,例如空格和制表符。它对非空白字符无效。
为了有效去除非法字符,需要利用 System.IO
命名空间提供的特定方法。以下是有效处理此任务的修改后的代码:
<code class="language-csharp">using System; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string illegal = " \"M\"\"\a/ry/ h**ad:>> a\/:*?\"| li*tt|le|| la\"mb.?"; // 删除无效的文件字符 illegal = illegal.Replace(Path.GetInvalidFileNameChars(), ""); // 删除无效的路径字符 illegal = illegal.Replace(Path.GetInvalidPathChars(), ""); Console.WriteLine(illegal); Console.ReadLine(); } } }</code>
在这个修改后的代码中,我们用 Replace
方法替换了 Trim
方法,它允许我们指定要从字符串中删除哪些字符。通过调用 Path.GetInvalidFileNameChars()
和 Path.GetInvalidPathChars()
,我们分别获得无效文件和路径字符的数组。然后,我们将这些数组作为要替换的字符传递,有效地将它们从原始字符串中删除。
以下是 Ceres 在另一个讨论线程中提供的另一种解决方案:
<code class="language-csharp">public string RemoveInvalidChars(string filename) { return string.Concat(filename.Split(Path.GetInvalidFileNameChars())); }</code>
这段代码使用 Split
方法在无效字符的位置分割字符串,然后重新组合生成的子字符串以创建一个不包含无效字符的新字符串。
您可能更倾向于将无效字符替换为特定字符,例如下划线:
<code class="language-csharp">public string ReplaceInvalidChars(string filename) { return string.Join("_", filename.Split(Path.GetInvalidFileNameChars())); }</code>
此代码将所有无效字符替换为下划线,使其适用于您希望保留路径或文件名原始结构的场景。
这些解决方案提供了强大且有效的方法来消除文件和路径字符串中的非法字符,确保兼容性并防止潜在的文件系统错误。
以上是如何有效去除文件路径和文件名中的非法字符?的详细内容。更多信息请关注PHP中文网其他相关文章!