2010-12-30 10 views
3

Path.GetInvalidFileNameCharsに、自分のアプリケーションで違法な文字を含むようにするにはどうすればよいですか?私は「&」などの不正な文字を追加したい場合はPath.GetInvalidFileNameChars()に不正な文字を挿入するC#

string invalid = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars()); 

、私はそれを行うだろうか?これはあなたのものを含むすべての無効な文字、とIEnumerable<char>をyeildます

var invalid = Path.GetInvalidFileNameChars().Concat(new [] { '&' }); 

答えて

2

既存の機能を変更することはできませんが、Path.GetInvalidFileNameChars()あなたの不正な文字を返すラッパー関数を書くことができます。

public static string GetInvalidFileNameChars() { 
    return Path.GetInvalidFileNameChars().Concat(MY_INVALID_FILENAME_CHARS); 
} 
+0

次は動作するようです:新しい文字列( '&'、1 )しかしintが何を意味するのかは分かりません。 "回数が発生する回数"? – Rod

+0

charとintをとる文字列コンストラクタでは、指定された回数繰り返した文字列を作成することができます。たとえば、 'new String( 'x'、5)'は "xxxxx"を与えます – matt

3

はこれを試してみてください。ここで

は完全な例である:

using System.IO; 
using System.Linq; 

class Program 
{ 
    static void Main() 
    { 
     // This is the sequence of characters 
     var invalid = Path.GetInvalidFileNameChars().Concat(new[] { '&' }); 
     // If you want them as an array you can do this 
     var invalid2 = invalid.ToArray(); 
     // If you want them as a string you can do this 
     var invalid3 = new string(invalid.ToArray()); 
    } 
} 
+0

:文字列無効=新しい文字列(Path.GetInvalidFileNameChars())+新しい文字列(Path.GetInvalidPathChars()) – Rod

1

ここでの拡張方法が最適です。次のように

public static class Extensions 
{ 
    public static char[] GetApplicationInvalidChars(this char[] input) 
    { 
     //Your list of invalid characters goes below. 
     var invalidChars = new [] { '%', '#', 't' }; 
     return String.Concat(input, invalidChars).ToCharArray(); 
    } 
} 

そして、それを使用する:

string invalid = Path.GetInvalidFileNameChars().GetApplicationInvalidChars();

それはそこにすでに何にあなたの無効な文字を連結します。

15
typeof(Path).GetField("InvalidFileNameChars", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, new[] { 'o', 'v', 'e', 'r', '9', '0', '0', '0' }); 
あなたはこのに組み込むだろうか
+0

+1は賢明ですが、生産コードでこれを見つけたらガスケットを吹くでしょう:) –

+3

私は人々を信じることができませんこれを投票した。それは巧妙ではない - そうです。プログラマーがプロダクションコードでこれをやっているのを見たなら、私は大声で罵倒し、彼の仕事をDaily WTFに提出して実行します。早く。 –

+4

これを投票した人々は、ユーモアのセンスを持っていることが主な理由でした。もちろん、Rubyでは、そのようなメタプログラミングのための言語サポート(ここに見られるフレームワークのサポートと比較して)のために、同じことがはるかに広く受け入れられます。もちろん、これはRubyの質問ではありませんでしたが、もしあなたがどのように学習しているか、またこれが別の世界では大丈夫なのかどうかを知る価値がないとしても、少なくともReflection(回答はありません) (これがうまく利用できないことを知る以外の理由がない場合は)よく知っておくべき良いことです。 –

関連する問題