Как реорганизовать структуру папок моих модулей в Delphi?

Я начал прототип с Delphi со всеми исходными файлами в одном каталоге.
Теперь я хочу реорганизовать все с помощью папок.

Я нашел два способа сделать это.

1 / Сначала нужно открыть каждый модуль в IDE Delphi и Save as новую папку. Затем удалите старый файл модуля.

2 / В проводнике Windows реорганизуйте все, затем откройте проект в IDE Delphi, удалите ссылку на старые (неизвестные) модули, а затем добавьте папку каждого модуля по папке.

Поскольку у меня более 100 единиц, это действительно болезненно, какой бы метод я ни использовал (1 или 2).
Как вы проводите такую ​​реорганизацию? Я пропустил какую-то функцию?


person TridenT    schedule 27.09.2012    source источник
comment
Думаю, самым быстрым было бы переместить файлы и отредактировать каждый .dpr вручную, когда IDE закрыта.   -  person Sertac Akyuz    schedule 27.09.2012
comment
Я согласен с @sertac - это вид деятельности, который лучше всего выполнять за пределами IDE. После того, как вы реорганизовали свои подразделения, перейдите в командное окно и введите dir / s / b * .pas ›units.txt из корня исходного каталога. Это даст вам файл units.txt, содержащий новый путь к вашему устройству. Используйте это для редактирования ваших файлов DPR.   -  person Keith Miller    schedule 27.09.2012
comment
@KeithMiller, не забывайте, что файлы .dproj также должны быть скорректированы, что может быть королевской головной болью. У @uweRaabe есть гораздо лучшее решение.   -  person Jeroen Wiert Pluimers    schedule 27.09.2012
comment
Да, - решение Уве - самый простой и лучший способ.   -  person Nick Hodges    schedule 27.09.2012
comment
@Sertac Akyuz ›Взлом файлов * .dpr и .dproj никогда не должен быть лучшим решением ... даже если это самый простой способ! Очень бы хотелось избежать подобного взлома!   -  person TridenT    schedule 27.09.2012
comment
@Jeroen - Что редактировать в файле .dproj? - Trident - Это ваш звонок ... Прочитав все комментарии и ответы, я все еще придерживаюсь комментариев, ручное редактирование кажется самым быстрым.   -  person Sertac Akyuz    schedule 27.09.2012
comment
@SertacAkyuz .dproj, как и .dpr, содержит пути к файлам.   -  person Jeroen Wiert Pluimers    schedule 27.09.2012
comment
@Jeroen - Похоже, что msbuild могут понадобиться эти записи, иначе они могут быть избыточными, AFAICT ... В любом случае, редактирование не требует особого труда, просто удалите записи dccreference, а затем в среде IDE повторно создаст команду «Сохранить все». их.   -  person Sertac Akyuz    schedule 28.09.2012
comment
@SertacAkyuz классный совет, спасибо!   -  person Jeroen Wiert Pluimers    schedule 28.09.2012
comment
@SertacAkyuz Я не понимаю точную процедуру, которую вы имеете в виду, когда говорите просто удалить записи dccreference. В каком файле вы удаляете такие записи dccreference? Вы имеете в виду открыть файл .droj с помощью внешнего редактора, а затем удалить из него записи dccreference? Благодарность   -  person Fabio Vitale    schedule 14.10.2014


Ответы (4)


Я не проверял XE, но в XE2 это довольно просто сделать внутри IDE:

  • в случае нескольких проектов объедините все проекты в одну группу проектов
  • in the project manager for each unit do
    • rename the unit by pressing F2 or use the context menu
    • при переименовании поместите подпапку перед именем модуля (например, test \ Unit1.pas)

IDE переместит модуль (удалив старый) и продвинет это изменение во все проекты в группе проектов.

person Uwe Raabe    schedule 27.09.2012
comment
Это правильный способ сделать это. IDE сделает за вас всю работу. - person Nick Hodges; 27.09.2012
comment
У меня это работает в DelphiXE. Но я должен делать это по одной единице за раз ... это настоящая боль;) Я надеялся, что смогу перетащить и опустить свои единицы в новую папку, используя окно Project Manager. - person TridenT; 27.09.2012
comment
Я одобряю этот ответ, так как он работает для меня и используется среда IDE. Другие разработчики могут захотеть взломать файлы проекта напрямую ... и я понимаю :) - person TridenT; 28.09.2012
comment
Кто-то может проверить, удастся ли при этом обеспечить интеграцию системы контроля версий. Я не использую Git, но в Mercurial это не проблема. Однако такие вещи могут быть настоящей PITA с подрывной деятельностью. - person Uwe Raabe; 28.09.2012
comment
Я использую bazaar вне среды Delphi IDE, это не проблема, поскольку bzr легко находит, что файлы были перемещены (или переименованы). - person TridenT; 28.09.2012
comment
@TridenT, хорошо - как я уже сказал, Mercurial тоже не затронут, но я знаю, что у Subversion есть / были проблемы с этим, и мне интересно, может ли интеграция контроля версий для svn справиться с этим лучше. - person Uwe Raabe; 28.09.2012

Вам действительно нужно, чтобы в проекте были названы все 100+ юнитов? Не являются ли некоторые из них просто общими функциями, которые можно поместить в папку на пути поиска? Удалите из проекта все менее часто используемые модули и поместите их в папки в соответствии с вашей логикой. IDE найдет их, и вы также можете щелкнуть правой кнопкой мыши, чтобы открыть их в IDE, когда вам нужно, без их имен в проекте с фиксированным путем.

person frogb    schedule 27.09.2012
comment
Я стремлюсь к тому, чтобы проекты были самодостаточными, что упрощает перенос разработки на другую машину / пользователя и запускает автоматизированные сборки. - person Jeroen Wiert Pluimers; 27.09.2012
comment
Я бы предпочел не взламывать * .dpr и * .dproj. Я использую непрерывную интеграцию с модульными тестами и статистикой покрытия тестами, такие инструменты анализируют файл * .dpr для сбора модулей! - person TridenT; 27.09.2012
comment
Просто добавьте в свой проект относительные пути поиска. Таким образом, пути идут везде, где идет ваш проект. - person norgepaul; 28.09.2012

Самый простой способ:

  1. Скопируйте файлы проекта в нужные папки;
  2. Отредактируйте файл проекта * .dpr, чтобы удалить все in ..;
  3. Измените параметры проекта и добавьте пути к папкам проекта в параметр пути поиска (не глобальные параметры проекта IDE по умолчанию, а параметры вашего проекта).
person kludg    schedule 27.09.2012

Только 2-й вариант. Перемещайте файлы в новые каталоги с помощью TotalCommander, Windows Explorer и т. Д. Я думаю, ваш исходный макет должен выглядеть так:

myutils
libs
    crypto
    database
    network

а затем добавьте эти каталоги:

myutils;libs\crypto;libs\database;libs\network

в ваш Unit Search Path

person Michał Niklas    schedule 27.09.2012
comment
Смотрите мои комментарии к frogb, я предпочитаю не использовать путь поиска для моих юнитов. - person TridenT; 27.09.2012