Это хорошо в общем случае:
yourPath.Split(@"\/", StringSplitOptions.RemoveEmptyEntries)
В возвращаемом массиве нет пустого элемента, если сам путь заканчивается (обратной) косой чертой (например, "\ foo \ bar \"). Однако вы должны быть уверены, что yourPath
действительно каталог, а не файл. Вы можете узнать, что это такое, и компенсировать, если это такой файл:
if(Directory.Exists(yourPath)) {
var entries = yourPath.Split(@"\/", StringSplitOptions.RemoveEmptyEntries);
}
else if(File.Exists(yourPath)) {
var entries = Path.GetDirectoryName(yourPath).Split(
@"\/", StringSplitOptions.RemoveEmptyEntries);
}
else {
// error handling
}
Я считаю, что это охватывает все основы, не будучи слишком педантичным. Он вернет string[]
, который вы можете перебрать с помощью foreach
, чтобы получить каждый каталог по очереди.
Если вы хотите использовать константы вместо магической строки @"\/"
, вам нужно использовать
var separators = new char[] {
Path.DirectorySeparatorChar,
Path.AltDirectorySeparatorChar
};
и затем используйте separators
вместо @"\/"
в коде выше. Лично я нахожу это слишком многословным и, скорее всего, не буду этого делать.