C # получить все родительские каталоги от пути до точки? - PullRequest
4 голосов
/ 09 июня 2011

У меня есть список в WPF, который автоматически получает полное имя файлов, перечисленных в этом поле, а затем добавляет эти файлы в Zip-файл в своей определенной папке.

Например:

C: \ ProgramFiles \ Folder1 \ Folder2 \ folder3 \ Folder4 \ file.txt

Мне нужно иметь возможность заархивировать его в свою папку до определенной папки, например, только

\ Folder2 \ folder3 \ Folder4 \ file.txt

Как я мог это сделать? Я попытался получить родительский каталог, но он возвращает только каталог, в котором находится файл.

Ответы [ 2 ]

3 голосов
/ 09 июня 2011

Вы можете использовать объект DirectoryInfo, чтобы вывести родителя в нужную цепочку. Если вы хотите получить родительский каталог на три уровня выше, вы можете сделать что-то вроде этого:

DirectoryInfo di = new DirectoryInfo(@"C:\ProgramFiles\Folder1\Folder2\Folder3\Folder4\file.txt");
        for(int i = 0; i<3; i++){
            di = di.Parent;
        }

Очевидно, вы можете изменить способ остановки обхода, чтобы точно удовлетворить ваши потребности. После того, как у вас есть объект DirectoryInfo, где он вам нужен, вы можете делать то, что вам нужно. Я предполагаю, что вам понадобится либо полный путь, либо использовать объект Directory. Чтобы получить полный путь, используйте свойство FullName. Например, если вам нужны все файлы в каталоге, вы можете сделать следующее:

 string[] fileNames = Directory.GetFiles(di.FullName);
2 голосов
/ 14 июля 2011
    private static IEnumerable<DirectoryInfo> GetAllParentDirectories(DirectoryInfo directoryToScan)
    {
        Stack<DirectoryInfo> ret = new Stack<DirectoryInfo>();
        GetAllParentDirectories(directoryToScan, ref ret);
        return ret;
    }

    private static void GetAllParentDirectories(DirectoryInfo directoryToScan, ref Stack<DirectoryInfo> directories)
    {
        if (directoryToScan == null || directoryToScan.Name == directoryToScan.Root.Name) 
            return;

        directories.Push(directoryToScan);
        GetAllParentDirectories(directoryToScan.Parent, ref directories);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...