Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 22.09.2009, 20:08   #1
Kuzya59
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 22
По умолчанию Достать директории из полного пути к файлу

Здравствуйте. Скажите пожалуйста как из пути "/dir1/dir2/dir1/file.txt" получить только директории (/dir1/dir2/dir3/)? Есть ли для этого какая-нибудь специальная функция?
P.S. Нужна обработка именно такой строки. Нашёл функцию ExtractFilePath(), но работает она лишь с обратными слэшами.

Последний раз редактировалось Kuzya59; 22.09.2009 в 20:13.
Kuzya59 вне форума Ответить с цитированием
Старый 22.09.2009, 20:16   #2
andreibtzt
Заблокирован
 
Регистрация: 04.04.2009
Сообщений: 43
По умолчанию

ExtractFilePath
andreibtzt вне форума Ответить с цитированием
Старый 22.09.2009, 20:17   #3
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,388
По умолчанию

Вот код:

Код:
 ExtractFilePath(StringReplace('/dir/dir/dir/text.txt', '/','\',[rfReplaceAll]));

Последний раз редактировалось uberchel; 22.09.2009 в 20:29. Причина: Забал поставить скобку --)
uberchel вне форума Ответить с цитированием
Старый 22.09.2009, 20:19   #4
TilerDerton
Пользователь
 
Регистрация: 12.02.2009
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Kuzya59 Посмотреть сообщение
Здравствуйте. Скажите пожалуйста как из пути "/dir1/dir2/dir1/file.txt" получить только директории (/dir1/dir2/dir3/)? Есть ли для этого какая-нибудь специальная функция?
P.S. Нужна обработка именно такой строки. Нашёл функцию ExtractFilePath(), но работает она лишь с обратными слэшами.
Как-то так получаем путь к файлу:
Цитата:
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Execute;
edit1.Text:=OpenDialog1.FileName;
end;
И вместо "edit1.Text" подставляем String, в который надо запихнуть значение, отрезаем название через copy/pos.
Как вариант.

Upd: как все просто=)
TilerDerton вне форума Ответить с цитированием
Старый 22.09.2009, 20:22   #5
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Вот:
Код:
function MExtractfilepath(const Path: string): string;
  var
    i: Integer;
  begin
    i := LastDelimiter('/', Path);
   Result := Copy(Path, 1, i);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=MExtractfilepath(edit1.Text);
end;
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 22.09.2009, 20:23   #6
TilerDerton
Пользователь
 
Регистрация: 12.02.2009
Сообщений: 34
По умолчанию

Цитата:
Сообщение от russian-stalker Посмотреть сообщение
Вот:
Код:
function MExtractfilepath(const Path: string): string;
  var
    i: Integer;
  begin
    i := LastDelimiter('/', Path);
   Result := Copy(Path, 1, i);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=MExtractfilepath(edit1.Text);
end;
Вот-вот это я и имел ввиду=)
TilerDerton вне форума Ответить с цитированием
Старый 23.09.2009, 11:04   #7
Kuzya59
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 22
По умолчанию

Всем большое спасибо за помощь. Немного покумекав я соорудил вот такую пародию php-шной pathinfo()

Код:
function getPathInfo(filePath: string): TStringList;
var
  data: TStringList;
  path: string;
begin
  data := TStringList.Create;

  path := StringReplace(filePath,'/','\',[rfReplaceAll]);
  path := ExtractFilePath(path);

  data.Values['path'] := StringReplace(path,'\','/',[rfReplaceAll]);
  data.Values['file'] := StringReplace(filePath,data.Values['path'],'',[rfReplaceAll]);

  Result := data;
end;
Как считаете, можно ли сделать чище или красивее?
Kuzya59 вне форума Ответить с цитированием
Старый 23.09.2009, 12:08   #8
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Нужно, я бы сказал ))

Вариантов тьма, но я бы использовал такой:

Код:
function getPathInfo(filePath: string): TStringList;
var
  data: TStringList;
  i: integer;
begin
  data := TStringList.Create;

  i := LastDelimiter('/', filePath);

  data.Values['path'] := copy(filePath,1,i-1);
  data.Values['file'] := copy(filePath,i+1,length(filePath)-i);

  Result := data;
end;
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как из полного пути к файлу получить имя файла с расширением uraura Компоненты Delphi 2 20.03.2009 15:53
Определение полного пути папок TreeView vitawt Общие вопросы Delphi 8 22.02.2009 15:13
Поиск кратчайшего пути в графе методом полного перебора в глубину. Метод ветвей и границ Олинька Помощь студентам 1 24.12.2008 16:22
1) Поиск кратчайшего пути в графе методом полного перебора в ширину(очередь) Serega123 Помощь студентам 3 30.10.2008 22:26
изменение пути к файлу Обыватель Microsoft Office Excel 2 30.09.2008 12:16


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS