Подтвердить что ты не робот

Как перемещаться по нескольким папкам?

Один из вариантов - несколько раз выполнить System.IO.Directory.GetParent(). Есть ли более изящный способ перемещения нескольких папок вверх, где находится исполняющая сборка?

Я пытаюсь найти текстовый файл, который находится в одной папке над папкой приложения. Но сама сборка находится внутри мусорного контейнера, что представляет собой несколько папок в папке приложения.

4b9b3361

Ответ 1

Другим простым способом является следующее:

string path = @"C:\Folder1\Folder2\Folder3\Folder4";
string newPath = Path.GetFullPath(Path.Combine(path, @"..\..\"));

Примечание Это два уровня вверх. Результатом будет:   newPath = @"C:\Folder1\Folder2\";

Ответ 2

если c:\folder1\folder2\folder3\bin - это путь, следующий код вернет базовую папку пути папки bin

string directory=System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString());

т, с:\folder1\folder2\folder3

если вы хотите путь folder2, то вы можете получить каталог

string directory = System.IO.Directory.GetParent(System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString()).ToString();

то вы получите путь как c:\folder1\folder2\

Ответ 3

Вы можете использовать ..\path для перехода на один уровень вверх, ..\..\path для перехода на два уровня вверх от пути.

Вы также можете использовать класс Path.

С# Path class

Ответ 4

Это то, что сработало лучше всего для меня:

string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../"));

Получение "правильного" пути не было проблемой, добавив "../", очевидно, делает это, но после этого данная строка не используется, потому что она просто добавит "../" на конец. Окружать его с помощью Path.GetFullPath() даст вам абсолютный путь, что сделает его пригодным для использования.

Ответ 5

Следующий метод ищет файл, начинающийся с пути запуска приложения (*.exe-папка). Если файл там не найден, родительские папки выполняются до тех пор, пока не будет найден ни файл, ни корневая папка. null возвращается, если файл не найден.

public static FileInfo FindApplicationFile(string fileName)
{
    string startPath = Path.Combine(Application.StartupPath, fileName);
    FileInfo file = new FileInfo(startPath);
    while (!file.Exists) {
        if (file.Directory.Parent == null) {
            return null;
        }
        DirectoryInfo parentDir = file.Directory.Parent;
        file = new FileInfo(Path.Combine(parentDir.FullName, file.Name));
    }
    return file;
}

Примечание. Application.StartupPath обычно используется в приложениях WinForms, но также работает в консольных приложениях; однако вам нужно будет установить ссылку на сборку System.Windows.Forms. Вы можете заменить Application.StartupPath на
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), если вы предпочитаете.

Ответ 6

это может помочь

string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../../")) + "Orders.xml";
if (File.Exists(parentOfStartupPath))
{
    // file found
}

Ответ 7

Может быть, вы можете использовать функцию, если хотите объявить количество уровней и поместить ее в функцию?

private String GetParents(Int32 noOfLevels, String currentpath)
{
     String path = "";
     for(int i=0; i< noOfLevels; i++)
     {
         path += @"..\";
     }
     path += currentpath;
     return path;
}

И вы можете назвать это следующим образом:

String path = this.GetParents(4, currentpath);

Ответ 8

Если вы знаете папку, к которой хотите перейти, найдите ее индекс, а затем подстроку.

            var ind = Directory.GetCurrentDirectory().ToString().IndexOf("Folderame");

            string productFolder = Directory.GetCurrentDirectory().ToString().Substring(0, ind);

Ответ 9

У меня есть несколько виртуальных каталогов, и я не могу использовать методы каталогов. Итак, я сделал простую функцию split/join для интересующихся. Не так безопасно, хотя.

var splitResult = filePath.Split(new[] {'/', '\\'}, StringSplitOptions.RemoveEmptyEntries);
var newFilePath = Path.Combine(filePath.Take(splitResult.Length - 1).ToArray());

Итак, если вы хотите поднять 4 вверх, вам просто нужно изменить 1 на 4 и добавить несколько проверок, чтобы избежать исключений.