fix: 修复特殊文件名导致闪退问题 Fixes: #18

This commit is contained in:
姚彪
2024-01-16 21:42:25 +08:00
parent 4d7c4a6d26
commit 9cfef3a52f

View File

@@ -180,55 +180,37 @@ public static class Format
/// <returns></returns>
public static string FormatFileName(string originName)
{
string destName = originName;
var destName = originName;
// Windows中不能作为文件名的字符
destName = destName.Replace("\\", " ");
destName = destName.Replace("/", " ");
destName = destName.Replace(":", " ");
destName = destName.Replace("*", " ");
destName = destName.Replace("?", " ");
destName = destName.Replace("\"", " ");
destName = destName.Replace("<", " ");
destName = destName.Replace(">", " ");
destName = destName.Replace("|", " ");
// destName = destName.Replace("\\", " ");
// destName = destName.Replace("/", " ");
// destName = destName.Replace(":", " ");
// destName = destName.Replace("*", " ");
// destName = destName.Replace("?", " ");
// destName = destName.Replace("\"", " ");
// destName = destName.Replace("<", " ");
// destName = destName.Replace(">", " ");
// destName = destName.Replace("|", " ");
// 转义字符
destName = destName.Replace("\a", "");
destName = destName.Replace("\b", "");
destName = destName.Replace("\f", "");
destName = destName.Replace("\n", "");
destName = destName.Replace("\r", "");
destName = destName.Replace("\t", "");
destName = destName.Replace("\v", "");
// destName = destName.Replace("\a", "");
// destName = destName.Replace("\b", "");
// destName = destName.Replace("\f", "");
// destName = destName.Replace("\n", "");
// destName = destName.Replace("\r", "");
// destName = destName.Replace("\t", "");
// destName = destName.Replace("\v", "");
destName = Path.GetInvalidFileNameChars().Aggregate(destName, (current, c) => current.Replace(c.ToString(), string.Empty));
// 控制字符
destName = Regex.Replace(destName, @"\p{C}+", string.Empty);
// 移除前导和尾部的空白字符、dot符
destName = destName.Trim();
destName = destName.Trim('.');
// 如果只有空白字符、dot符
if (destName == " " || destName == ".")
{
return "[empty title]";
}
// 移除前导和尾部的空白字符、dot符
int i, j;
for (i = 0; i < destName.Length; i++)
{
if (destName[i] != ' ' && destName[i] != '.')
{
break;
}
}
for (j = destName.Length - 1; j >= 0; j--)
{
if (destName[j] != ' ' && destName[j] != '.')
{
break;
}
}
return destName.Substring(i, j - i + 1);
return destName is "" or "." ? "[empty title]" : destName;
}
}