2012-08-02 3 views
5

完全なパスと共にファイル名を検証したかったのです。私は以下のように特定の正規表現を試しましたが、どれも正常に動作しませんでした。後述するようにUNCパスを含むWindowsベースのファイルパスを検証するための正規表現

^(?:[\w]\:|\\)(\\[a-z_\-\s0-9\.]+)+\.(txt|gif|pdf|doc|docx|xls|xlsx)$ 
and 
^(([a-zA-Z]\:)|(\\))(\\{1}|((\\{1})[^\\]([^/:*?<>""|]*))+)$ 
etc... 

私の要件は次のとおりです。 は、ファイル名がある場合としましょう「C:\ Demo.txt」それは含まれるべきなしダブルスラッシュ(c:\\Demo\\demo.text)余分なコロンなどのように、すべてのpossibilitesをチェックする必要があります(c::\Demo\demo.text)。 UNCファイル(\\staging\servers)などの検証も受け入れる必要があります。助けてください。私は本当にここで立ち往生しています。

+0

この宿題はありますか? – Steve

+0

実際に宿題がありません。いくつかの重要な仕事は、これを止めてしまった。 – Yash

+1

あなたのファイルがアップロードされている場合は、実際にはパス名かファイル名部分だけが関係していますか? – Steve

答えて

2

なぜあなたはFileクラスを使用していませんか? 常に使用してください!

File f = null; 
string sPathToTest = "C:\Test.txt"; 
try{ 
f = new File(sPathToTest); 
}catch(Exception e){ 
    Console.WriteLine(string.Format("The file \"{0}\" is not a valid path, Error : {1}.", sPathToTest , e.Message); 
} 

MSDN:http://msdn.microsoft.com/en-gb/library/system.io.file%28v=vs.80%29.aspx

はたぶん、あなただけGetAbsolutePathは可能性があり

また、Pathクラスに見てみましょう(http://msdn.microsoft.com/en-us/library/system.io.path.aspx

http://msdn.microsoft.com/en-gb/library/system.io.file.exists%28v=vs.80%29.aspx)File.Existsを探していますあなたが欲しいものを手に入れる方法! (http://msdn.microsoft.com/en-us/library/system.io.path.getfullpath.aspx

string sPathToTest = "C:\Test.txt"; 
string sAbsolutePath = ""; 
try{ 
    sAbsolutePath = Path.GetAbsolutePath(sPathToTest); 
    if(!string.IsNullOrEmpty(sAbsolutePath)){ 
    Console.WriteLine("Path valid"); 
    }else{ 
    Console.WriteLine("Bad path"); 
    } 
}catch(Exception e){ 
    Console.WriteLine(string.Format("The file \"{0}\" is not a valid path, Error : {1}.", sPathToTest , e.Message); 

} 
+0

私もこれを試しました。それは助けには良くなかった。だから私は正規表現に行くことを考えました.. – Yash

+0

ファイルがアップロードされます。ファイルの名前が要求されています – Yash

+0

重要な計算上のオーバーヘッドが発生するため、入力の検証に例外処理を使用することは一般的にはお勧めできません。 –

0

あなただけのファイル名の一部に興味がある場合(全体ではなく、パスアップロード経由でファイルを取得するために)、あなたはこのような何かを試みることができる:この意志

string uploadedName = @"XX:\dem<<-***\demo.txt"; 

int pos = uploadedName.LastIndexOf("\\"); 
if(pos > -1) 
    uploadedName = uploadedName.Substring(pos+1); 

var c = Path.GetInvalidFileNameChars(); 
if(uploadedName.IndexOfAny(c) != -1) 
    Console.WriteLine("Invalid name"); 
else 
    Console.WriteLine("Acceptable name"); 

をコードのロジックを駆動するメソッドとしてExceptionsを使用しないようにします。

関連する問題