Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2010, 10:06   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Вопрос Создание папки в папке

Доброго времени суток! Возник такой вопрос. Есть папка с номером, например, 200. В ней несколько тысяч файлов с именами в таком виде: 1_111111.pdf, 2_111111.pdf, 1_222222.pdf и т.д. Что требуется:
1. Создать общую папку, у которой имя будет 200;
2. Создать в ней подпапки, у которых в качестве имени задается число после "_", т.е. например, папка с именем 111111, в ней файл 1.pdf,2.pdf. Другая подпапка с именем 222222, в ней файл 1.pdf и т.д.
3. Каким-то макаром организовать поиск.
С первым пуктом вроде проблем быть не должно, воспользуюсь функцией GetBefore. Но вот как быть c другими пунктами. Можете что-то подсказать по делу? Заранее спасибо за помощь.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 05.08.2010, 10:16   #2
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

создать папку в любом месте так ForceDirectories(путь к конечной папке);

Цитата:
Сообщение от artemavd Посмотреть сообщение
2. Создать в ней подпапки, у которых в качестве имени задается число после "_", т.е. например, папка с именем 111111, в ней файл 1.pdf,2.pdf. Другая подпапка с именем 222222, в ней файл 1.pdf и т.д.
задесь можно из имени файла получать (111111, 222222 и тп), а потом переименовывать файл
Цитата:
3. Каким-то макаром организовать поиск.
с этим не понятно, что вам конкретно нужно?
Не забываем говорить спасибо за помощь - это ведь так приятно

Последний раз редактировалось Stilet; 05.08.2010 в 12:30.
Sanprof вне форума Ответить с цитированием
Старый 05.08.2010, 10:33   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

э... а в чём вопрос?
в цикле через FindFirst / FindNext
Проверять наличие папки, если её нет, создавать:
if not DirectoryExists(stInDir) then ForceDirectories(stInDir);
переносить туда файлы через Move
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.08.2010, 11:12   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
с этим не понятно, что вам конкретно нужно?
Ну, например, есть файлы: 200_1_111111.pdf и 200_2_111111.pdf. Нужно создать папки и подпапки таким способом, о котором шла речь выше и затем сделать возможность поиска по ShellTreeView. Ну например я ввожу в строке поиска 111111 и у меня в дереве отображается содержимое папки 111111 с файлами 1.pdf, 2.pdf. Так понятнее?
Цитата:
ForceDirectories(stInDir);
Это что за чудо?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 05.08.2010, 11:32   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

короче, Вам написать готовую процедурку, которая разнесёт (и при этом переименует Ваши файлы) ?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.08.2010, 11:41   #6
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

можно такой алгоритм
1. Создаем TStringList в нем будут пути к файлам, делаем поиск по папке заполняем наш Лист.
Работаем с первым элементом Листа
2. Получаем Имя файла, из него выделяем 200 (имя корневого каталога) и создаем папку, далее выделяем 111111 (имя подкаталога) создаем внутри 200.
3. Копируем файл (либо перемещаем) и переименовываем.
И так по всему списку нашего Листа
Все.
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 05.08.2010, 11:46   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
короче, Вам написать готовую процедурку, которая разнесёт (и при этом переименует Ваши файлы) ?!
Если Вас это не затруднит.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 05.08.2010, 12:32   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Это что за чудо?)
Это функция создающая каталог со всеми вложенными в него каталогами (если они есть не трогает) по указанному пути.
Цитата:
3. Каким-то макаром организовать поиск.
Все файлы в одной папке или там вложенность какая-то есть?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.08.2010, 14:51   #9
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Вот, набросал...
Код:
var
  searchResult : TSearchRec;
  i: Integer;
  NameDir, NameFile: string;
begin
  if FindFirst('c:\200\*.*', faAnyFile-faDirectory, searchResult) = 0 then
  begin
    repeat
      ListBox1.Items.Add(searchResult.Name);
    until FindNext(searchResult) <> 0;
    FindClose(searchResult);
  end;
  for i:=0 to ListBox1.Count-1 do begin
    NameDir := 'c:\200\' + Copy(ListBox1.Items.Strings[i],
        Pos('_', ListBox1.Items.Strings[i])+1, Pos('.', ListBox1.Items.Strings[i])-3);
    if not DirectoryExists(NameDir) then
      ForceDirectories(NameDir);
    NameFile := Copy(ListBox1.Items.Strings[i], 1, Pos('_', ListBox1.Items.Strings[i])-1);
    CopyFile(PAnsiChar('c:\200\'+ListBox1.Items.Strings[i]),
      PAnsiChar(NameDir+'\'+NameFile+ExtractFileExt(ListBox1.Items.Strings[i])), False);
    DeleteFile('c:\200\'+ListBox1.Items.Strings[i]);
  end;
Вообщем, делает список всех файлов в каталоге "c:\200\" и заносит их в ListBox. Затем, создает, если нету, каталог с именем находящийся в именах файлов, типа 1_22222.pdf, между знаков "_" и ".". Копирует файлы в эти каталоги с именем до знака "_" и удаляет их оригиналы с "c:\200\".

Если я правильно понял суть вопроса, значит это то, что вам нужно. Если, что-то не так - пишите, поправлю, если надо.
W0LF вне форума Ответить с цитированием
Старый 05.08.2010, 15:09   #10
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Wolf, неплохо . Почти то, что нужно, но немного не так. Нужно, чтобы была родительская папка, 200, в ней были созданы подпапки, у которых в качестве имени идет, например, 111111, а уже в папке 111111 содержатся файлы 1_111111.pdf, 2_111111.pdf . . Вот.

Кстати, я отключу удаление исходных файлов. Этого не должно происходить, это я подправлю . Может из за этого грузится в ListBox долго.

Цитата:
Все файлы в одной папке или там вложенность какая-то есть?
Простой поиск дочерней подпапки в родительской папке.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание папки на FTP delphin100 Работа с сетью в Delphi 4 01.03.2016 14:33
Создание папки в C Александр Елис Помощь студентам 3 07.11.2009 11:28
Создание папки sergiksergik Microsoft Office Excel 6 26.06.2009 00:07
Создание папки Яр|/||< (^_^) Общие вопросы Delphi 2 23.06.2009 19:18
создание файла в папке Мои Документы (Delphi) sonic007 Помощь студентам 1 27.05.2008 17:07