如何重新组织Delphi单元的文件夹结构?

16

我用Delphi创建了一个原型,将所有源文件放在单个目录下
现在,我想要通过文件夹重新组织一切。

我发现有两种方法可以实现这一点。

1/ 第一种方法是在Delphi IDE中打开每个单元并另存为到新的文件夹。然后删除旧的单元文件。

2/ 在Windows资源管理器中重新组织一切,然后在Delphi IDE中打开项目,删除对旧(未知)单元的引用,然后逐个文件夹添加每个单元。

由于我有100多个单元,无论使用哪种方法(1或2),都会很痛苦。
你是如何完成这样的重新组织的? 我错过了某个功能吗?


2
最快的方法,我想应该是在IDE关闭时移动您的文件并手动编辑每个 .dpr。 - Sertac Akyuz
1
我同意 @sertac 的看法——这种活动最好在集成开发环境之外完成。重新组织完您的单元后,进入命令行窗口,并从源目录的根目录输入 _dir /s /b *.pas >units.txt_。这将为您提供一个文件 _units.txt_,其中包含您单元的新路径。使用它来编辑您的 DPR 文件。 - Keith Miller
1
@KeithMiller 别忘了还需要调整 .dproj 文件,这可能会很麻烦。@uweRaabe 有一个更好的解决方案。 - Jeroen Wiert Pluimers
3
看起来msbuild可能需要这些条目,否则它们可能是多余的,据我所知...无论如何,这里没有涉及太多编辑,只需删除“dccreference”条目,然后在IDE中执行“全部保存”将重新生成它们。 - Sertac Akyuz
@SertacAkyuz,当您说“只需删除'dccreference'条目”时,我不明白您打算执行的确切过程。您要在哪个文件中删除这些'dccreference'条目?您是指使用外部编辑器打开.droj文件,然后从中删除'dccreference'条目吗?谢谢。 - Fabio Vitale
显示剩余4条评论
5个回答

20

我没有检查XE,但在XE2中,这在IDE内部相当容易实现:

  • 如果有多个项目,请将所有项目放入一个项目组中
  • 对于每个单元,在项目管理器中进行以下操作:
    • 按F2或使用上下文菜单重命名单元
    • 在重命名时,将子文件夹放在单元名称前面(例如test\Unit1.pas)

IDE将移动该单元(删除旧单元),并将此更改推广到项目组中的所有项目。


3
这是正确的做法。IDE会为您完成所有工作。 - Nick Hodges
4
这对我在DelphiXE中很有用。但我必须一个单位一个单位地进行操作...这真的很痛苦 ;) 我希望能够使用项目管理器窗口将我的单位拖放到新文件夹中。 - TridenT
我会批准这个答案,因为它对我有用,而且它使用了IDE。其他开发人员可能想直接修改项目文件...我可以理解 :) - TridenT
有人可能会检查一下,这是否也会使版本控制集成保持良好。我不使用Git,但在Mercurial中,这不是问题。然而,在Subversion中,这样的事情可能会非常麻烦。 - Uwe Raabe
@TridenT,好的 - 正如我所说,Mercurial也没有受到影响,但我知道Subversion曾经有过这方面的问题,我想知道svn的版本控制集成是否能更好地处理这个问题。 - Uwe Raabe
显示剩余4条评论

4

您是否真的需要在项目中为所有100多个单元命名?其中一些不是可以放置在搜索路径上的文件夹中作为公共函数吗?从项目中删除所有不经常使用的单元并将它们放置在适合您逻辑的文件夹中。IDE会找到它们,当您需要时,您还可以右键单击在IDE中打开它们,而无需在项目中以固定路径命名它们。


我努力让项目自包含,这样可以更轻松地将开发转移到不同的机器/用户,并运行自动化构建。 - Jeroen Wiert Pluimers
1
我宁愿不去黑客*.dpr和*.dproj文件。 我正在使用连续集成与单元测试和测试覆盖率统计,这些工具解析*.dpr文件以收集单元! - TridenT
只需将相关的搜索路径添加到您的项目中。这样,路径就会随着您的项目一起移动。 - norgepaul

4

最简单的方法是:

  1. 将项目文件复制到您想要它们存在的文件夹中;
  2. 编辑项目 *.dpr 文件以删除所有 in ..
  3. 编辑项目选项并将项目文件夹的路径添加到搜索路径选项中(不是全局IDE默认项目选项,而是您的项目选项)。

2
只需要使用第二个选项。可以使用TotalCommander、Windows Explorer等工具将文件移动到新目录中。我认为你的源代码布局应该是这样的:
myutils
libs
    crypto
    database
    network

然后添加这些目录:

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

添加到您的单元搜索路径


1
请看我对frogb的评论,我更喜欢不使用搜索路径来管理我拥有的单元。 - TridenT

0
我找到了解决方案,适用于Delphi Alexandria。只需打开文件(在项目树上双击),然后从“文件”菜单中选择“另存为...”,并将文件保存到新位置。也就是说,文件保存到新位置并更新了项目。然后,只需使用您喜欢的文件管理器删除旧文件即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接