63 votes

C#/.NET: Quelle est la meilleure façon de combiner un chemin et un nom de fichier?

Quelle est la meilleure façon de combiner un chemin d'accès avec un nom de fichier?

C'est, compte tenu "c:\foo" et "bar.txt" je veux "c:\foo\bar.txt".

Donné "c:\foo" et "..\bar.txt" je veux une erreur ou d' "c:\foo\bar.txt" (je ne peux donc pas utiliser le Chemin.Combiner() directement). De même pour 'c:\foo" et "bar/baz.txt" je veux une erreur "c:\foo\baz.txt" (pas "c:\foo\bar\baz.txt").

Je me rends compte, j'ai pu vérifier que le nom de fichier ne contient pas de '\' ou '/', mais est-ce suffisant? Si non, quelle est la bonne case?

101voto

LukeH Points 110965

Si vous voulez "mauvais" des noms de fichiers pour générer un message d'erreur:

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

Ou, si vous voulez juste silencieusement correcte "mauvais" des noms de fichiers sans lancer une exception:

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

17voto

GvS Points 28137

Vous pouvez utiliser:

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

ou, pour passer le \ (pas testé, peut-être le Chemin d'accès.GetFileName gère cela automatiquement)

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X