C# 创建前确保文件名有效
我正在以编程方式写入如下文件:C# 创建前确保文件名有效,c#,file,file-io,C#,File,File Io,我正在以编程方式写入如下文件: file = new StreamWriter("C:\\Users\\me\\Desktop\\test\\sub\\" + post.title + ".txt"); file.Write(postString); file.Close(); 但是,有时程序会崩溃,因为文件名的非法字符出现在post.title中。像这样的字符一般的方法是为Path.GetInvalidFileNameChars()中的字符清除post.title值 这个类似的线程展示了如
file = new StreamWriter("C:\\Users\\me\\Desktop\\test\\sub\\" + post.title + ".txt");
file.Write(postString);
file.Close();
但是,有时程序会崩溃,因为文件名的非法字符出现在
post.title
中。像这样的字符一般的方法是为Path.GetInvalidFileNameChars()中的字符清除post.title
值
这个类似的线程展示了如何为卫生目的进行字符串替换的方法:
如果链接失败,这里有一个很好的答案:
private static string MakeValidFileName( string name )
{
string invalidChars = Regex.Escape( new string( Path.GetInvalidFileNameChars() ) );
string invalidReStr = string.Format( @"[{0}]+", invalidChars );
return Regex.Replace( name, invalidReStr, "_" );
}
如果它是由于StreamWriter构造函数上的异常而崩溃的(这似乎很可能),您可以简单地将其放在异常捕获块中
这样,您就可以让您的代码处理这种情况,而不仅仅是陷入一堆
换句话说,类似于:
try {
file = new StreamWriter ("C:\\Users\\me\\sub\\" + post.title + ".txt");
catch (Exception e) { // Should also probably be a more fine-grained exception
// Do something intelligent, notify user, loop back again
}
在修改文件名以使其可接受方面,回答了大量文件系统中允许的字符列表
基本上,(文件名限制比较
)中的第二个表显示了什么是允许的,什么是不允许的
您可以使用正则表达式替换来确保将所有无效字符转换为有效字符,例如。除非您在公司内部进行一些内部开发,否则您应该使用用户环境.SpecialFolder.Desktop
,而不是硬编码路径。这是一个很好的答案,请记住警告:“此方法返回的数组不保证包含文件名和目录名中无效的完整字符集。”-您可能需要根据文件系统类型进行调整。