Подтвердить что ты не робот

Каков наилучший способ комбинировать путь и имя файла в С#/. NET?

Каков наилучший способ комбинировать путь с именем файла?

То есть, учитывая c:\foo и bar.txt, я хочу c:\foo\bar.txt.

Учитывая c:\foo и ..\bar.txt, я хочу либо ошибку, либо c:\foo\bar.txt (поэтому я не могу напрямую использовать Path.Combine()). Аналогично для c:\foo и bar/baz.txt, я хочу ошибку или c:\foo\baz.txt (не c:\foo\bar\baz.txt).

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

4b9b3361

Ответ 1

Если вы хотите, чтобы "плохие" имена файлов генерировали ошибку:

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));

Ответ 2

Вы можете использовать:

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

или, чтобы пропустить\(не тестировалось, возможно, Path.GetFileName обрабатывает это автоматически)

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

Ответ 3

Помните, что когда вы используете Path.Combine(arg1, arg2) - если ваш пользователь вводит полностью квалифицированный путь к файлу для arg2, он игнорирует arg1 и использует arg2 в качестве пути.

По-моему, Microsoft прищурилась! Это может оставить вас широко открытыми, когда пользователь взломает всю вашу файловую систему. Будьте осторожны, прочитайте мелкий шрифт! Если вы комбинируете пути, используйте: var newPath = path1 + @"\" + path2; проще и без неожиданных результатов...