Path.GetFullPath() возвращает ввод с помощью \rC#

Место общения программистов C#
Ответить
Anonymous
 Path.GetFullPath() возвращает ввод с помощью \r

Сообщение Anonymous »

Почему Path.GetInvalidPathChars() не обнаруживает \r, а Path.GetFullPath() — определяет? (.NET Framework 4.7.2)
Я работаю с приложением .NET 4.7.2 и проверяю пути к файлам.
Я заметил неожиданное поведение, когда входная строка содержит завершающий возврат каретки (\r).

Код: Выделить всё

string input = "C:\\Temp\\TestFolder\r";

if (input.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0 ||
input.IndexOfAny(Path.GetInvalidPathChars()) >= 0)
{
// This block is NOT hit
return true;
}

try
{
var fullPath = Path.GetFullPath(input);

if (fullPath.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0 ||
fullPath.IndexOfAny(Path.GetInvalidPathChars()) >= 0)
{
// This block IS hit
return true;
}
}
catch
{
return true;
}
Наблюдение
  • содержит завершающий символ \r
  • Первый if не возвращает true
  • После вызова Path.GetFullPath(input) второй if возвращает true
Вопросы
  • Почему нет Path.GetInvalidPathChars() обнаруживает \r в исходном вводе?
  • Разве Path.GetInvalidPathChars() не предназначен для полноценного механизма проверки?
  • Ожидается ли такое поведение в .NET 4.7.2 или это ошибка?


Подробнее здесь: https://stackoverflow.com/questions/798 ... put-with-r
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»