确保文件名在创建之前有效

时间:2012-08-27 01:28:11

标签: c# file file-io

我是以编程方式写入这样的文件:

file = new StreamWriter("C:\\Users\\me\\Desktop\\test\\sub\\" + post.title + ".txt");
file.Write(postString);
file.Close();

但是,有时程序崩溃是因为文件名的非法字符在post.title中。 <"等字符。

如何将post.title转换为安全文件名?

2 个答案:

答案 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 pageComparison of filename limitations)中的第二个表格显示了什么是不允许的。

您可以使用正则表达式替换来确保将所有无效字符转换为有效字符,例如_,或者完全删除。