Навигация по каталогам с помощью Path.Combine
Я пытаюсь перейти на несколько каталогов, а затем войти в папку ввода...
Я пробовал это
var path = Path.Combine(Directory.GetCurrentDirectory(), @"..\\..\\..\\Input\\" + filename);
но ценность пути заканчивается тем, что..
C:\\Users\user1\\Desktop\\ToSend\\test\\reverser\\Reverser\\bin\\Debug\\..\\\\..\\\\..\\\\Input\\\\limerick.txt
Есть идеи?
5 ответов
Вам нужно получить абсолютный, а не относительный путь. Поэтому вы должны использовать GetFullPath() вместо Combine ().
Проверьте это
Прежде всего, при использовании @ со строками нет необходимости экранировать символы \, поэтому просто используя одиночные косые черты, вы можете избежать двойных косых черт в результате.
По поводу пути вопроса: это зависит от того, что вы хотите сделать. Если строка результата используется для выполнения некоторых файловых операций с использованием System.IO.File.*
или для записи / чтения из файла, используя StreamReader
/StreamWriter
сама операция позаботится о перемещении вверх по каталогам при обнаружении \..\
так что не надо волноваться!
Чтобы расширить ответ Ламлуми и очистить код:
var path = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), @"..\..\..\Input", filename));
должен произвести абсолютный путь к вашему файлу.
Предполагая, что вы знаете, сколько уровней вы хотите удалить со своего пути:
public string DirectoryGOUp(string path, int levelCount) {
if(string.IsNullOrEmpty(path) || levelCount < 1)
return path;
string upperLevel = System.IO.Path.GetDirectoryName(path);
if(--levelCount > 0)
return DirectoryGOUp(upperLevel, levelCount);
return upperLevel;
}
А потом назовите это:
var newPath = DirectoryGOUp (Directory.GetCurrentDirectory (), 3); newPath = Path.Combine (newPath, @ "Input \" + filename);