我是以编程方式写入这样的文件:
file = new StreamWriter("C:\\Users\\me\\Desktop\\test\\sub\\" + post.title + ".txt");
file.Write(postString);
file.Close();
但是,有时程序崩溃是因为文件名的非法字符在post.title
中。 <
和"
等字符。
如何将post.title
转换为安全文件名?
答案 0 :(得分:7)
一般方法是清除post.title
Path.GetInvalidFileNameChars()
值
http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidfilenamechars.aspx
这个类似的线程显示了如何为卫生目的进行字符串替换的方法: C# Sanitize File Name
如果链接断开,这是一个非常好的答案:
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, "_" );
}
答案 1 :(得分:0)
如果它由于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
}
在变形文件名以使其可接受方面,大量文件系统中的允许字符列表已被回答here。
基本上,this Wikipedia page(Comparison of filename limitations
)中的第二个表格显示了什么是不允许的。
您可以使用正则表达式替换来确保将所有无效字符转换为有效字符,例如_
,或者完全删除。