5

ファイル名とそのフルパスを検証したかったのです。以下のような特定の正規表現を試しましたが、どれも正しく機能しませんでした。

^(?:[\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)などの余分なコロンを含めない( )など、すべての可能性をチェックする必要がありますc::\Demo\demo.text。( ) などの UNC ファイル\\staging\serversやその他の検証も受け入れる必要があります。助けてください。私は本当にここで立ち往生しています。

4

2 に答える 2

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

たぶんあなたはFile.Existsを探しているだけです(http://msdn.microsoft.com/en-gb/library/system.io.file.exists%28v=vs.80%29.aspx

Pathクラス(http://msdn.microsoft.com/en-us/library/system.io.path.aspx)も確認してください。

GetAbsolutePathは、必要なものを取得する1つの方法です。(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);

}
于 2012-08-02T12:11:42.540 に答える
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");

これにより、コードのロジックを駆動するメソッドとして例外を使用する必要がなくなります。

于 2012-08-02T12:45:10.750 に答える