Что является лучшим способом, чтобы объединить путь и имя файла в C#/.Чистая?
каков наилучший способ объединить путь с именем файла?
то есть, учитывая c:foo и bar.txt, Я хочу c:foobar.txt.
дано c:foo и ..bar.txt, Я хочу либо ошибку или c:foobar.txt (поэтому я не могу использовать Path.Combine() напрямую). Аналогично для c:foo и bar/baz.txt, Я хочу ошибку или c:foobaz.txt (не c:foobarbaz.txt).
Я понимаю, я мог бы проверить, что имя файла не содержит '' или '/', Но разве этого достаточно? Если нет, то что правильно чек?
3 ответов:
Если вы хотите, чтобы "плохие" имена, чтобы генерировать сообщение об ошибке:
if (Path.GetFileName(fileName) != fileName) { throw new Exception("'fileName' is invalid!"); } string combined = Path.Combine(dir, fileName);или, если вы просто хотите молча исправить "плохие" имена файлов без исключения:
string combined = Path.Combine(dir, Path.GetFileName(fileName));
вы могли бы использовать:
Path.Combine(folder, Path.GetFileName(fileName))или, чтобы пропустить \ (не проверено, возможно, путь.GetFileName обрабатывает это автоматически)
Path.Combine(folder, Path.GetFileName(fileName.Replace("/","\")))
имейте в виду, что при использовании
Path.Combine(arg1, arg2)- Если ваш пользователь вводит полный путь к файлу для arg2, он будет игнорировать arg1 и использовать arg2 в качестве пути.на мой взгляд, Microsoft облажался там! Это может оставить вас широко открытыми с пользователем взлома всей файловой системы. Будьте осторожны, читайте мелкий шрифт! Если вы комбинируете пути, используйте:
var newPath = path1 + @"\" + path2;проще и никаких неожиданных результатов...
Comments