[System.IO.Путь]::GetFileName() с путями к папкам

#powershell

Вопрос:

Я могу использовать [System.IO.Path]::GetFileName() вместо Split-Path -leaf , и это работает как для каталогов, так и для файлов, но для каталогов это немного «не по назначению», и в документах вообще не упоминается использование с каталогами. Есть ли вероятность возникновения проблем с его использованием таким образом, как будто он в основном использует ошибку, которая может когда-нибудь быть исправлена? или это просто недокументированная «функция»?

Комментарии:

1. Нет, с этим нет никаких проблем, и никакой ошибки или недокументированной функции, это просто разделение строки и возврат последней части. Больше в этом ничего нет…. Однако я не понимаю, почему вы хотели бы использовать эту функцию вместо «разделенного пути». При написании сценариев powershell было бы лучше использовать функции powershell там, где это возможно

2. Хотя это моя работа на данный момент, разработчики не дают и не должны гарантировать, что она будет работать в будущем. Если они изменят реализацию, вы можете столкнуться с неопределенным поведением. Вот почему я настоятельно рекомендую не использовать его.

3. @D-J, я склонен использовать . СЕТЕВЫЕ опции, когда они доступны, потому что они часто намного быстрее. Я просто использую PowerShell в качестве связующего звена и логики для подключения . Чистый материал. Поэтому, даже когда это не требуется, я предпочитаю .NET для согласованности и удобочитаемости. Но @stackprotector говорит, что это место, где согласованность также рискованна, и это то, о чем я беспокоился. Я МОГ бы использовать ([System.IO.DirectoryInfo]'PATH').Name , но тогда мне нужно условие, так как оно ТАКЖЕ работает с файлами и создает ту же проблему.

4. @Гордон directoryinfo.name просто вызывает [System.IO.Path]::GetFileName() внутренне (см. Исходный код referencesource.microsoft.com/#mscorlib/system/io/… ))

5. @d-j Итак, следующий вопрос здесь. Тот факт, что под капотом это используется [System.IO.Path]::GetFileName() , предполагает, что, возможно, это безопасно, так как это, по крайней мере, все еще файловая система. Однако я только что обнаружил, что [System.IO.Path]::GetFileName() на самом деле работает с путями реестра и эффективно обеспечивает тот же результат, Split-Path -leaf что и . Это очень удобно, но ужасно для читаемости кода, и я беспокоюсь о том, что Microsoft «исправит» это позже. ДЕЙСТВИТЕЛЬНО хотелось бы, чтобы у них было немного больше строгости и последовательности. Тьфу.