2012-08-02 88 views
5

Quería validar un nombre de archivo junto con su ruta completa. Intenté ciertas Expresiones regulares como las siguientes, pero ninguna de ellas funcionó correctamente.Expresión regular para validar rutas de archivos basadas en Windows, incluidas las rutas UNC

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

Mi requisito es como se menciona a continuación: permite decir si el nombre del archivo es "c: \ demo.txt" entonces se debe comprobar cada posibilidades como ningún doble barra debe ser incluido (c:\\Demo\\demo.text) hay dos puntos adicionales como (c::\Demo\demo.text). Debería aceptar archivos UNC como (\\staging\servers) y validación de otros también. Por favor ayuda. Estoy realmente atrapado aquí.

+0

¿Es esta tarea? – Steve

+0

no es tarea en realidad. Algunos trabajos importantes se han estancado por esto. – Yash

+1

Si su archivo se carga, ¿realmente está preocupado por el nombre de ruta o solo en la parte del nombre del archivo? – Steve

Respuesta

2

¿Por qué no está utilizando la clase File? ¡Úsalo siempre!

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

Tal vez usted está sólo en busca de File.Exists (http://msdn.microsoft.com/en-gb/library/system.io.file.exists%28v=vs.80%29.aspx)

también echar un vistazo a la clase Path (http://msdn.microsoft.com/en-us/library/system.io.path.aspx)

El getAbsolutePath podría haber ¡Una forma de obtener lo que quieres! (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

Lo he intentado también. pero no fue bueno para ayudar. Así que pensé en ir a Regular Expression. – Yash

+0

El archivo se cargará. el nombre del archivo proviene de la solicitud – Yash

+0

. En general, no es una buena idea utilizar el manejo de excepciones para validar las entradas ya que incurre en una sobrecarga computacional significativa. –

0

Si usted está interesado únicamente en la parte de nombre de archivo (y no todo el camino porque se obtiene el archivo a través de subida), entonces usted podría intentar algo como esto:

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"); 

Esta voluntad evite el uso de Excepciones como método para manejar la lógica de su código.

Cuestiones relacionadas