带“ |”的FileInfo路径在路径异常中给出非法字符?

时间:2018-11-16 00:33:20

标签: c# exception file-io

当我尝试使用包含'|'的字符串构造FileInfo对象时字符,路径异常中出现非法字符。该字符串只是从我无法控制的某些数据源中解析而来的,因此我无法在原始字符串中添加任何转义字符。因此,我在字符串上尝试了.Replace(“ |”,“ \ |”),但仍然遇到相同的异常。避免这种情况的正确方法是什么,这样我就不会出现异常情况?

此外,还有一种方法可以获取异常中令人反感的字符,以便我的异常处理可以自动更正它,而我不必等待下一个不允许开始崩溃的魔术字符就可以崩溃处理错误?

2 个答案:

答案 0 :(得分:3)

听起来好像您的数据源没有为您使用的操作系统提供有效的文件路径/名称。

您可以使用Path.GetInvalidFileNameChars()Path.GetInvalidPathChars()来获取文件名或路径中不允许的字符数组。这些文件需要删除而不逃避,以使其对文件系统合法。去除这些可能是一种解决方法,而不是解决方法。最好从数据源处解决问题。

答案 1 :(得分:0)

这是一个示例方法,该方法将从字符串的路径部分中删除无效的路径字符,并从输入字符串的文件名部分中删除无效的文件字符:

public static string RemoveIllegalChars(string path)
{
    if (string.IsNullOrWhiteSpace(path)) return path;

    // Remove invalid directory characters
    Path.GetInvalidPathChars().ToList()
        .ForEach(c => path = path.Replace(c.ToString(), ""));

    // Remove invalid file name characters from file name portion and return the result
    return Path.Combine(Path.GetDirectoryName(path),
        Path.GetInvalidFileNameChars()
            .Aggregate(Path.GetFileName(path), (fileName, invalidChar) =>
                fileName.Replace(invalidChar.ToString(), "")));
}