13

ファイルを読み取り、コラムのタイトルに従ってファイルの一部を保存するプログラムに取り組んでいます。これらのタイトルの一部には、ファイル名に使用できない文字が含まれているため、これらの問題を処理するためにこのコードを作成しました。

string headerfile = saveDir + "\\" + tVS.Nodes[r].Text.Replace("\"", "").Replace
              ("/","").Replace(":"," -").Replace(">","(Greater Than)") + ".csv";

4 がない場合にこれを行うより良い方法はあり.Replace()ますか? または、私が知らない不正な文字リムーバーが組み込まれていますか?

ありがとう!

編集:文字を特定のものに置き換える必要はありません。空白で十分です。

4

4 に答える 4

37

正規表現は一般的にそれを行うための良い方法ですが、すべての文字を別のものに置き換える場合はそうではありません。それらをすべて同じものに置き換えて、を使用することを検討してくださいSystem.IO.Path.GetInvalidFileNameChars()

string filename = tVS.Nodes[r].Text;

foreach(char c in System.IO.Path.GetInvalidFileNameChars()) {
    filename = filename.Replace(c, '_');
}
于 2012-06-05T13:40:52.047 に答える
9

System.IO.Path.GetInvalidFileNameChars()すべての無効な文字があります。

サンプルメソッドは次のとおりです。

public static string SanitizeFileName(string fileName, char replacementChar = '_')
{
    var blackList = new HashSet<char>(System.IO.Path.GetInvalidFileNameChars());
    var output = fileName.ToCharArray();
    for (int i = 0, ln = output.Length; i < ln; i++)
    {
        if (blackList.Contains(output[i]))
        {
            output[i] = replacementChar;
        }
    }
    return new String(output);
}
于 2012-06-05T13:39:49.067 に答える
2

Regex.Replaceをご覧ください。文字を個別に削除する場合は、必要なすべての処理が実行されます。他の文字列を選択的に置き換えるのは難しいかもしれません。

于 2012-06-05T13:38:20.357 に答える
2
string charsToRemove = @"\/:";TODO complete this list

string filename;

string pattern = string.format("[{0}]", Regex.Escape(charsToRemove));
Regex.Replace(filename, pattern, "");

違法な文字を他のものに置き換えるのではなく、単に削除したい場合は、これを使用できます。

于 2012-06-05T13:41:30.773 に答える