Directory.GetFiles с '/' на любой платформе - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь получить путь с помощью '/' char, используя Directory.GetFiles или Directory.GetDirectories, заменяя строку каждый раз, когда я ее создаю. Я бы просто попросил библиотеку использовать '/' в качестве разделителя каталогов, даже если у меня есть какой-нибудь макрос, который говорит ему использовать AltSeperator в определенных ОС.

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Общая техника:

string MyPathCombine(string basename, string filename)
{
    int idx = basename.Length;
    if (idx == 0) return filename;
    if (basename[idx - 1] == '/') --idx;
    return filename;
}


IEnumerable<string> GetFilesSlash(string dirname)
    => Directory.GetFiles(dirname.Replace('/', Path.DirectorySeparatorCharacter)).Select((p) => MyPathCombine(dirname, Path.GetFileName(p));

Если все ваши пути исходят из реальной системы, эта более простая форма будет работать, но если какая-либо из них поступит из другой системы, это не так, как вы могли бы быть отравлены символом \. Однако это не единственная опасность. Отсюда становится неровно.

IEnumerable<string> GetFilesSlash(string dirname)
    => Directory.GetFiles(dirname.Replace('/', Path.DirectorySeparatorCharacter)).Select((p) => p.Replace(Path.DirectorySeparatorChar, '/'));
0 голосов
/ 05 января 2019

К сожалению, это кажется невозможным.

Path.DirectorySeparatorChar и Path.AltDirectorySeparatorChar зависят от ОС, в которой работает ваше приложение, и доступны только для чтения.

Согласно документам DirectorySeparatorChar - это \ в Windows и / везде, а Path.AltDirectorySeparatorChar (в настоящее время) всегда /.

...