Что является лучшим способом, чтобы объединить путь и имя файла в 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).



Я понимаю, я мог бы проверить, что имя файла не содержит '' или '/', Но разве этого достаточно? Если нет, то что правильно чек?

690   3  

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

    Ничего не найдено.