我认为 Visual Studio 2017(IDE 的早期版本也是如此)及其在文件视图中的文件呈现方式是一种虚拟文件组织系统。文件视图允许您以逻辑方式组织文件,以更有用的方式呈现实际的文件系统。
在文件视图中看起来像文件夹的图标并不是真正的文件夹,而是标签,称为过滤器,它允许您根据自己的喜好对文件进行分组,而不管它们是如何物理存储在您的持久存储区域中的,例如硬盘。
过滤器更灵活,不对应于物理文件夹层次结构,因为它们允许您将所有位于单个文件夹中的文件组织成逻辑组。过滤器允许以比通常通过在文件夹中分组文件更细的粒度来完成此操作。过滤器还允许您将多个文件夹中的文件组合到文件视图中的单个逻辑文件夹中。
但是过滤器可能会令人困惑,因为我们大多数人都习惯于文件夹层次结构,以至于过滤器方法可以将过滤器中表示的逻辑文件与位于文件夹中的物理文件位置断开。
我的典型添加文件方法
通常我所做的是通过 Windows 创建物理文件夹或克隆现有的 Git、Subversion 或 VS Team Services 源代码树。有了新的东西,我可以使用新解决方案或新项目向导来创建我的初始起点,然后通过 Windows 物理组织和添加文件和文件夹,然后进入 Visual Studio IDE 创建过滤器,然后将现有文件添加到过滤器.在某些情况下,我会在过滤器中创建子过滤器,以便更好地组织物理文件夹中的文件。
对于新文件,我将只使用Add New Item 菜单选项将项目添加到正确的项目中。如果您右键单击过滤器名称,新文件将自动添加到过滤器中。在某些情况下,当我在项目中添加了额外的过滤器来组织文件时,我会将新创建的项目拖到适当的过滤器并放在那里。
这种拖放不会改变文件的物理位置,而是通过将文件从一个过滤器移动到另一个过滤器来改变其逻辑位置。要将文件从一个文件夹物理移动到另一个文件夹,我通常会使用 Windows 来执行此操作。请记住,如果您确实使用 Windows 物理移动文件,您还必须在 Visual Studio 2017 过滤器中修改该文件的条目,我通常在文件上执行 Remove,然后是 Add Existing Item 并浏览到它的新位置。
看来你不能在同一个项目的多个过滤器中拥有同一个文件。
在某些情况下,当我Add New item 时,我会使用Browse 按钮从Add New Item 对话框中显示的建议文件夹更改为不同的文件夹。如果我需要文件的不同扩展名,那么我也会进行更改,这是将新 C 源文件添加到需要将 .cpp 扩展名更改为 .c 的项目时的常见操作。
您还可以使用Browse 按钮导航到一个文件夹,然后如果您喜欢使用右键单击显示的文件和文件夹列表时显示的右键菜单,您可以在该文件夹中创建一个新文件夹。
不幸的是,Add New Item 对话框总是希望将一个文件与所有其他文件一起放入项目目录中。 Add Class 向导不会让您有机会指定默认项目文件夹以外的任何内容。在某些情况下,我使用 Visual Studio IDE 创建了 C++ 类,将它们从项目中删除,将物理文件移动到我希望它们所在的位置,然后将它们添加回项目中。
过滤方法似乎效果很好,因为整个解决方案分为多个项目,每个项目都有自己的物理文件夹。多个项目可能对应于解决方案使用的特定 DLL 或静态库或其他组件。
另见Can I configure Visual Studio to use real folders instead of filters in C++ projects?
文件夹和过滤器的示例截图
这是正在使用的资源的小项目的 Windows 文件夹视图:
这就是我设置过滤器的方式。通常资源文件的列表可能会很长,但是我创建了两个子过滤器来从逻辑上将位图文件与图标文件分开,尽管它们都共享相同的物理资源文件夹。
此外,名为 PepIncludes 的过滤器对应于一个名称相同的实际物理文件夹,而名为“头文件”和“源文件”的过滤器是一组文件,它们都位于与项目名称相同的同一物理文件夹中文件夹。
以下屏幕截图显示了过滤器如何提供灵活性。我有一个包含包含文件 PepIncludes 的文件夹,并且我在此 Visual Studio 2017 解决方案的两个不同项目中拥有相同的文件集合。在具有 30 或 40 个项目的解决方案中,这可以使管理文件变得更加容易。例如,您可以看到修改文件“ECR.h”后,它已被修改的事实显示在两个过滤器文件列表中(名称旁边的红色小复选标记)。