2

私はプログラムで次のようなファイルに書き込んでいます:

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

ただし、ファイル名に使用できない文字が に含まれているために、プログラムがクラッシュすることがありますpost.title<やのような文字"

どうすればpost.title安全なファイル名に変換できますか?

4

2 に答える 2

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, "_" );
}
于 2012-08-27T01:29:34.283 に答える
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 
}

ファイル名をモーフィングして受け入れ可能にするという点で、多数のファイルシステムで受け入れられる文字のリストがここで回答されました。

基本的に、このウィキペディアページの2番目の表(Comparison of filename limitations)は、許可されているものと許可されていないものを示しています。

正規表現の置換を使用して、すべての無効な文字がなどの有効な文字に変換されるか、_完全に削除されるようにすることができます。

于 2012-08-27T01:48:08.993 に答える