powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получение относительного пути к файлу
6 сообщений из 6, страница 1 из 1
Получение относительного пути к файлу
    #38973406
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучаю C#, решил написать простенькую утилитку перебора файлов в папке с подпапками.

Надо получить относительный путь без имени файла, т.е. отрезать базовый путь. Например перебираем "c:\temp" для файла "c:\temp\test\123.txt" относительный путь "test"

Хотел сделать обрезание строки первых N-символов (длина базового пути). Наткнулся на такую проблему: пути к папкам (например DirectoryInfo.DirectoryName) возвращаются без слэша (например "c:\temp"), но если файл в корне диска, то со слэшем "c:\". Из-за этого обрезание усложняется.

Есть какая-то готовая функция/объект для подобного обрезания? Или свои написать? Как/чем вообще принято с путями работать?
т.е. для файла с DirectoryName "c:\temp\test" должно получаться
Базовая папкаРезультатc:\temptestc:\temp\test
PS В FoxPro все было просто - пути всегда были со слэшем на конце, там даже есть спец.функция ADDBS() добавляет слэш если его нет.
PPS .NET 4.0
...
Рейтинг: 0 / 0
Получение относительного пути к файлу
    #38973437
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если путь к корневой папке всегда будет заканчиваться слэшем (сделать доп. проверку; если слэша нет - добавить), то
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
var file = new Uri(@"c:\foo\bar\zot zot#zot\test.txt");
var folder = new Uri(@"c:\foo\");
var relativePath = Path.GetDirectoryName(
  Uri.UnescapeDataString(
      folder.MakeRelativeUri(file)
          .ToString()
          .Replace('/', Path.DirectorySeparatorChar)
      ));
...
Рейтинг: 0 / 0
Получение относительного пути к файлу
    #38973443
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получился вот такой изврат
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
    class Test
    {
        Int32 baselen; // длина базового пути
        Int32 max = 10; // ограничение количества выводимых файлов

        void ParseFolder(String path) {
            if (max-- < 0) return;
            foreach (FileInfo file in new DirectoryInfo(path).GetFiles()) {
                String subpath = Path.GetDirectoryName(file.FullName.Substring(baselen)); // относительный путь
                Console.WriteLine("{0}|{1}|{2}", file.DirectoryName, subpath, file.Name);
            }
            foreach (var folder in new DirectoryInfo(path).GetDirectories()) {
                ParseFolder(folder.FullName);
            }
        }

        public Test(String basepath)
        {
            Console.WriteLine("********* Parse folder {0}", basepath);
            if (basepath.EndsWith("\\")) { // расчет длины базового пути с учетом завершающего слэша
                baselen = basepath.Length;
            } else {
                baselen = basepath.Length + 1;
            }
            ParseFolder(basepath);
        }
    }

//Использование
            var x = new Test("c:\\");
            var y = new Test("c:\\temp");


ИМХУ Как-то корявенько, но работает.
...
Рейтинг: 0 / 0
Получение относительного пути к файлу
    #38973664
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    [TestFixture]
    public class Class1
    {
        [TestCase(@"c:\temp", @"c:\temp\test\file.txt", Result = "test")]
        [TestCase(@"c:\", @"c:\temp\test\file.txt", Result = @"temp\test")]
        public string GetPath(string bs, string path)
        {
            return Path.GetDirectoryName(path).Remove(0, bs.Length).Trim(new[] { '\\' });
        }
    }



Ну и условия всякие написать, для пустых значений и так далее.
...
Рейтинг: 0 / 0
Получение относительного пути к файлу
    #38973825
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T ...PS В FoxPro все было просто...
В .NET ещё проще. MS создал для нас Path Class - в котором уже всё есть, надо только почитать что там есть и начать использовать (подход будет немного другим чем в FoxPro): click

Good luck!
...
Рейтинг: 0 / 0
Получение относительного пути к файлу
    #38973907
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey ChDima T ...PS В FoxPro все было просто...
В .NET ещё проще. MS создал для нас Path Class - в котором уже всё есть, надо только почитать что там есть и начать использовать
Читал про Path, его и задействовал 17716061 , но ADDBS() в нем не нашел :)
Насчет проще - хз. Пока изучаю то что есть, немного разберусь - будет понятно где проще.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получение относительного пути к файлу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]