1

ファイル パスの文字列 (ユーザーからの入力) があります。基準を満たすように文字列をチェックしました。

  • ファイル パスの無効な文字を確認する
  • 絶対パス(\Sample\text.txt)は受け入れません

無効な文字は次のとおりです。

< > : " / \ | ? *

これらの無効な文字を catch 句でキャッチしようとしました。「\」以外は機能します。無効なファイル パスである「C:\\Sample\text.txt」を受け入れます。

次の例は無効なパスである必要があります。

  • :\text.txt
  • :text.txt
  • \:text.txt
  • \text.txt
  • C:\\\text.txt

ff。有効なパスの例:

  • C:\text.txt

ここに投稿された同様の質問をしましたが、どれも私の問題を解決していないようです。

そのようなチェックを行う最良の方法は何でしょうか?

4

2 に答える 2

4

Path.GetFullPathを使用できます。パスが無効な場合は例外がスローされます。次のようなメソッドを持つことができます:

public static bool IsValidPath(string path)
{
    try
    {
       path = path.Replace(@"\\", ":"); // to cancel out c:\\\\test.text
       string temp = Path.GetPathRoot(path); //For cases like: \text.txt
       if (temp.StartsWith(@"\"))
            return false;
       string pt = Path.GetFullPath(path);
    }
    catch //(Exception NotSupportedException) // catch specific exception here or not if you want
    {
        return false;
    }
    return true;
}

テストするサンプル コード:

List<string> list = new List<string>()
{
    @":\text.txt",
    @":text.txt",
    @"\:text.txt",
    @"\text.txt",
    @"C:\\\text.txt",
    @"C:\text.txt",

};

foreach(string str in list)
{
    Console.WriteLine("Path: {0} is Valid = {1}" ,str,IsValidPath(str));
}

出力:

Path: :\text.txt is Valid = False
Path: :text.txt is Valid = False
Path: \:text.txt is Valid = False
Path: \text.txt is Valid = False
Path: C:\\\text.txt is Valid = False
Path: C:\text.txt is Valid = True
于 2012-10-18T05:07:19.143 に答える
1

次のように、ファイルパスの検証にregex.match()メソッドを使用します。

Match match = Regex.Match(input, ^(?:[\w]\:|\\)(\\[a-z_\-\s0-9\.]+)+\.(?i)(txt|gif|pdf|doc|docx|xls|xlsx)$,
        RegexOptions.IgnoreCase);
于 2012-10-18T05:15:49.000 に答える