6

ファイルから特定のタグを読み取り、タグ値に基づいてディレクトリ構造を作成する C# プログラムを作成しています。

これらのタグには何でも含まれる可能性があります。

タグ名がディレクトリ名に適していない場合は、それらの文字を適切なものに置き換えて、適切になるように準備する必要があります。そのため、ディレクトリの作成は失敗しません。次のコードを使用していましたが、これでは十分ではないことに気付きました..

path = path.replace("/","-");
path = path.replace("\\","-");

どうするのが一番いいのか教えてください..

ありがとう、

4

4 に答える 4

4

System.IO 名前空間をインポートし、パスを使用するために

Path.GetInvalidPathChars

およびファイル名の使用

Path.GetInvalidFileNameChars

例えば

string filename = "salmnas dlajhdla kjha;dmas'lkasn";

foreach (char c in Path.GetInvalidFileNameChars())
    filename = filename.Replace(System.Char.ToString(c), "");

foreach (char c in Path.GetInvalidPathChars())
    filename = filename.Replace(System.Char.ToString(c), "");

次に、Path.Combine を使用してタグを追加し、パスを作成できます

string mypath = Path.Combine(@"C:\", "First_Tag", "Second_Tag"); 

//return C:\First_Tag\Second_Tag
于 2012-04-10T02:15:12.253 に答える
3

ここで無効な文字の完全なリストを使用して、必要に応じて置換を処理できます。これらは、Path.GetInvalidFileNameCharsおよびPath.GetInvalidPathCharsメソッドを介して直接利用できます。

于 2012-04-10T01:21:48.103 に答える
2

使用する必要のある文字は次のとおりです。? < > | : \ / * "

    string PathFix(string path)
    {
        List<string> _forbiddenChars = new List<string>();
        _forbiddenChars.Add("?");
        _forbiddenChars.Add("<");
        _forbiddenChars.Add(">");
        _forbiddenChars.Add(":");
        _forbiddenChars.Add("|");
        _forbiddenChars.Add("\\");
        _forbiddenChars.Add("/");
        _forbiddenChars.Add("*");
        _forbiddenChars.Add("\"");

        for (int i = 0; i < _forbiddenChars.Count; i++)
        {
            path = path.Replace(_forbiddenChars[i], "");
        }

        return path;
    }

ヒント:二重引用符 ( ") を含めることはできませんが、2 つの引用符 ( '') を含めることはできます。この場合:

    string PathFix(string path)
    {
        List<string> _forbiddenChars = new List<string>();
        _forbiddenChars.Add("?");
        _forbiddenChars.Add("<");
        _forbiddenChars.Add(">");
        _forbiddenChars.Add(":");
        _forbiddenChars.Add("|");
        _forbiddenChars.Add("\\");
        _forbiddenChars.Add("/");
        _forbiddenChars.Add("*");
        //_forbiddenChars.Add("\""); Do not delete the double-quote character, so we could replace it with 2 quotes (before the return).

        for (int i = 0; i < _forbiddenChars.Count; i++)
        {
            path = path.Replace(_forbiddenChars[i], "");
        }

        path = path.Replace("\"", "''"); //Replacement here
        return path;
    }

もちろん、それらの1つだけを使用します(または、必要に応じて、引用符を置き換えるためのboolパラメーターを使用して1つの関数に結合します)

于 2012-04-10T01:40:33.633 に答える