68 votos

C#/.NET: ¿Cuál es la mejor forma de combinar una ruta y un nombre de archivo?

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

Es decir, dada "c:\foo" y "bar.txt" quiero "c:\foo\bar.txt".

Dado "c:\foo" y de "..\bar.txt" quiero un error o a una "c:\foo\bar.txt" (por lo tanto no puedo usar la Ruta.Combinar() directamente). Lo mismo para 'c:\foo" y "bar/baz.txt" quiero un error o "c:\foo\baz.txt" (no "c:\foo\bar\baz.txt").

Me doy cuenta, pude comprobar que el nombre del archivo no contiene '\' o '/', pero ¿es suficiente? Si no, ¿cuál es la correcta?

105voto

LukeH Puntos 110965

Si desea que el "malo" de los nombres de archivo para generar un error:

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

O, si usted sólo quiere silenciosamente correcta "malo" nombres de archivo sin lanzar una excepción:

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

18voto

GvS Puntos 28137

Usted podría utilizar:

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

o, para saltar fuera de la \ (no probado, tal vez el Camino.GetFileName controla automáticamente)

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X