Существует ли системно-независимый способ определения строк, представляющих текущий и родительский уровень каталога? - PullRequest
0 голосов
/ 09 октября 2018

Различные среды, в которых может выполняться код C #, имеют разные соглашения / правила для того, как должны выглядеть пути к файлам и каталогам.

Типичным примером является символ, который разделяет уровни каталога.В Windows это \, в Linux - /, и все же другие (также будущие) системы могут следовать даже другим правилам.

Поэтому для создания надежного кода рекомендуется всегда использоватьPath.DirectorySeparatorChar (или, конечно, используя вспомогательные методы, такие как Path.Combine), а не жестко кодировать определенный символ-разделитель каталогов.

Теперь, наВ различных системах существует несколько «псевдо-каталогов», которые можно использовать в путях:

  • . представляет текущий каталог
  • .. представляет родительский каталог, т.е.на один уровень выше текущего каталога

Хотя в Windows и Linux они совпадают, другие среды (в которых может быть реализован Mono) могут иметь здесь другой синтаксис.

Я не хочу жестко кодировать эти псевдо-каталоги.Как я могу получить их во время выполнения?

1 Ответ

0 голосов
/ 09 октября 2018

Я не думаю, что это проблема./ работает в Windows, Unix и Linux.То же самое для .. и ..Он также является частью Uniform Naming Convention , которая используется для сетевых путей.

В реализации Mono Path class .. и . даже жестко закодированы.Я не вижу никакого смысла избегать жесткого кодирования, если базовый фреймворк даже делает это.

Отрывок:

internal static void CheckSearchPattern(String searchPattern)
{
    int index;
    while ((index = searchPattern.IndexOf("..", StringComparison.Ordinal)) != -1) {

        if (index + 2 == searchPattern.Length) // Terminal ".." . Files names cannot end in ".."
            throw new ArgumentException(Environment.GetResourceString("Arg_InvalidSearchPattern"));

        if ((searchPattern[index+2] ==  DirectorySeparatorChar)
            || (searchPattern[index+2] == AltDirectorySeparatorChar))
            throw new ArgumentException(Environment.GetResourceString("Arg_InvalidSearchPattern"));

        searchPattern = searchPattern.Substring(index + 2);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...