Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
xVahax
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
1

Определить путь до папки, имя которой известно

17.02.2014, 18:40. Просмотров 701. Ответов 8
Метки нет (Все метки)

Всем привет.

Подскажите как в делфи задать путь, если в нем не известно точное имя одной из папок.

К примеру: есть путь d:\In\Bases\PDB_12\Arh\

цифра в папке PDB_xx всегда разная, но папка всегда одна,
В командной строке написал бы d:\In\Bases\PDB_*\Arh\,
а как тут не знаю...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2014, 18:40
Ответы с готовыми решениями:

Как изменить имя и путь папки в которой создается сборка (библиотека dll) с локализацией
Есть вопросы по поводу локализации приложения. В простейшем случае выставляем Localized = true в...

Как получить список логинов пользователей БД, имя которой известно?
Здравствуйте! -------------- Как из системных таблиц получить список логинов пользователей базы...

Active Directory получение пользователей группы имя которой мне известно
Есть код где я получаю имена всех групп на сервере private void GGroups_Click(object sender,...

Создание папки, путь которой находится в переменной
Здравствуйте, надо создать папку, путь которой находится в переменной строкового типа. Просто...

Переименовать файл в имя папки, в которой он находится
скажите, а можно ли прописать чтобы файл переименовывался так как называется папка в которой лежат...

8
DeathAngel
9 / 9 / 5
Регистрация: 17.02.2012
Сообщений: 176
17.02.2014, 18:54 2
Я бы сделал так, добавил бы функцию:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure GetAllFiles( Path: string );
var
  sr: TSearchRec;
begin
  if FindFirst(Path + '*.*', faAnyFile, sr) = 0 then
  begin
    repeat
    if (sr.Attr and faDirectory) <> 0 then  // если найденный файл - папка
      begin
      if (sr.Name <> '.') and (sr.Name <> '..') then  // игнорировать служебные папки
        begin
          profile:=sr.Name;
        end;
      end;
    until FindNext(sr) <> 0;
  end;
  FindClose(sr);
end;
Применил бы где нужно:
Delphi
1
GetAllFiles('D:\In\Bases\');
А в переменной "profile" было бы название твоей папки.
и потом использовал бы:
Delphi
1
'D:\In\Bases\'+profile+'\Arh\'
1
xVahax
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
17.02.2014, 19:11  [ТС] 3
Спасибо, завтра попробую)
0
DeathAngel
9 / 9 / 5
Регистрация: 17.02.2012
Сообщений: 176
17.02.2014, 19:18 4
Немного поправил:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function GetFolders(Path: string): string;
var
  sr: TSearchRec;
begin
  if FindFirst(Path + '*.*', faAnyFile, sr) = 0 then
  begin
    repeat
    if (sr.Attr and faDirectory) <> 0 then  // åñëè Г*Г*éäåГ*Г*ûé ГґГ*éë - ГЇГ*ГЇГЄГ*
      begin
      if (sr.Name <> '.') and (sr.Name <> '..') then  // ГЁГЈГ*îðèðîâГ*ГІГј ñëóæåáГ*ûå ГЇГ*ГЇГЄГЁ
        begin
          Result:=sr.Name;
        end;
      end;
    until FindNext(sr) <> 0;
  end;
  FindClose(sr);
end;
Использование:
Delphi
1
ShowMessage('D:\In\Bases\'+GetFolders('D:\In\Bases\')+'\Arh\');
0
17.02.2014, 19:18
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27170 / 18168 / 7194
Регистрация: 22.10.2011
Сообщений: 32,022
Записей в блоге: 6
17.02.2014, 21:55 5
В новых версиях Дельфи (XE+) это делается проще:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
uses System.IOUtils, Masks;
 
// ...
 
procedure TForm1.Button1Click(Sender: TObject);
var path : string;
begin
  path := TDirectory.GetDirectories('D:\In\Bases',
    function(const Path: string; const SearchRec: TSearchRec): Boolean
    begin result := MatchesMask(SearchRec.Name, 'PDB_*') end)[0] + '\Arh\';
 
  ShowMessage(path);
end;
2
DeathAngel
9 / 9 / 5
Регистрация: 17.02.2012
Сообщений: 176
17.02.2014, 21:58 6
С помощью функции выше я на Delphi 7 выдергивал папку профиля в Mozilla Firefox.
UI, спасибо за код для новых версий.
0
xVahax
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
18.02.2014, 10:38  [ТС] 7
В новых версиях Дельфи (XE+) это делается проще:...

UI, спасибо - все отлично работает, а можете пояснить мне
что значит: ...[0] + ...
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27170 / 18168 / 7194
Регистрация: 22.10.2011
Сообщений: 32,022
Записей в блоге: 6
18.02.2014, 10:59 8
TDirectory.GetDirectories возвращает массив путей, удовлетворяющих заданным критериям. Поскольку ты сказал, что у тебя всегда только одна подходящая папка, то в этом массиве будет только один нулевой элемент, вот я и вытаскиваю этот нулевой элемент. А потом добавляю еще остаток пути...
0
xVahax
18 / 17 / 0
Регистрация: 27.11.2012
Сообщений: 353
18.02.2014, 17:59  [ТС] 9
Цитата Сообщение от UI Посмотреть сообщение
TDirectory.GetDirectories возвращает массив путей, удовлетворяющих заданным критериям. Поскольку ты сказал, что у тебя всегда только одна подходящая папка, то в этом массиве будет только один нулевой элемент, вот я и вытаскиваю этот нулевой элемент. А потом добавляю еще остаток пути...
А, понял. Спасибо)
0
18.02.2014, 17:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2014, 17:59

Создание папки, имя которой взято из переменной
Как создать папку, имя которой будет взято из переменной. Такой код выводит ошибку :...

Копирование на флешку папки, имя которой меняется
Имеется папка на рабочем столе &quot;Данные (14.10.2012)&quot; Завтра она будет &quot;Данные (15.10.2012)&quot; итд....

Переименовать файл в имя папки, в которой он находится
есть 30 папок с разными названиями в каждой папке 1 файл, его надо переименовать в такое же имя как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru