una ruta recuperar obtener nombre net imagen dinamico carpeta asp archivo c# .net path filenames

recuperar - ¿Cuál es la mejor manera de combinar una ruta y un nombre de archivo en C#/.NET?



path dinamico c# (3)

¿Cuál es la mejor manera de combinar una ruta con un nombre de archivo?

Es decir, dado c:/foo y bar.txt , quiero c:/foo/bar.txt .

Dado c:/foo y ../bar.txt , quiero un error o c:/foo/bar.txt (por lo que no puedo usar Path.Combine() directamente). De forma similar para c:/foo y bar/baz.txt , quiero un error o c:/foo/baz.txt (no c:/foo/bar/baz.txt ).

Me doy cuenta de que podría verificar que el nombre del archivo no contenga ''/' o ''/'', pero ¿es eso suficiente? Si no, ¿cuál es el cheque correcto?


Podrías usar:

Path.Combine(folder, Path.GetFileName(fileName))

o, para omitir el / (no probado, tal vez el Path.GetFileName maneja esto automáticamente)

Path.Combine(folder, Path.GetFileName(fileName.Replace("/","//")))


Si desea que los nombres de archivo "malos" generen un error:

if (Path.GetFileName(fileName) != fileName) { throw new Exception("''fileName'' is invalid!"); } string combined = Path.Combine(dir, fileName);

O, si solo quiere corregir silenciosamente los nombres de archivo "malos" sin lanzar una excepción:

string combined = Path.Combine(dir, Path.GetFileName(fileName));


Tenga en cuenta que cuando use Path.Combine(arg1, arg2) : si su usuario ingresa una ruta de archivo completamente calificada para arg2, ignorará arg1 y utilizará arg2 como la ruta.

En mi opinión, Microsoft jodió allí! Esto puede dejarlo completamente abierto cuando el usuario piratee todo su sistema de archivos. Tenga cuidado, lea la letra pequeña! Si está combinando rutas, use: var newPath = path1 + @"/" + path2; Más simple y sin resultados inesperados ...