C# 如何在Visual Studio 2005加载项中查找和打开文件?
我正在使用VisualStudio2005C#制作一个插件,以帮助轻松地在源文件和头文件之间切换,以及所有遵循类似命名结构的脚本文件。但是,目录结构将所有文件放在不同的位置,即使它们都在同一个项目中 我已经准备好了几乎所有的部分,但是我不知道如何仅根据文件名在解决方案中查找和打开文件。所以我知道我来自c:\code\project\subproject\src\blah.cpp,我想打开c:\code\project\subproject\inc\blah.h,但我不一定知道blah.h在哪里。我可以硬编码不同的目录路径,但该实用程序不够通用,不够健壮 该解决方案有多个项目,这似乎也有点痛苦。我在想,在这一点上,我必须迭代每个项目,迭代每个项目项,以查看特定文件是否存在,然后获得对它的正确引用C# 如何在Visual Studio 2005加载项中查找和打开文件?,c#,visual-studio-2005,add-in,envdte,C#,Visual Studio 2005,Add In,Envdte,我正在使用VisualStudio2005C#制作一个插件,以帮助轻松地在源文件和头文件之间切换,以及所有遵循类似命名结构的脚本文件。但是,目录结构将所有文件放在不同的位置,即使它们都在同一个项目中 我已经准备好了几乎所有的部分,但是我不知道如何仅根据文件名在解决方案中查找和打开文件。所以我知道我来自c:\code\project\subproject\src\blah.cpp,我想打开c:\code\project\subproject\inc\blah.h,但我不一定知道blah.h在哪里。
但在我看来,必须有一种更简单的方法来做到这一点。要对任何用户的文件结构进行一般性工作,您需要枚举所有项目中的所有文件。这应该让你开始。而且,好吧,差不多完成了:-) 请注意,标头可能位于包含路径中,而不添加到项目中,因此如果上述操作失败,您也可以在包含项目的包含路径中查找。我将把它作为练习留给读者
internal static string GetSourceOrInclude(bool openAndActivate)
{
// Look in the project for a file of the same name with the opposing extension
ProjectItem thisItem = Commands.Application.ActiveDocument.ProjectItem;
string ext = Path.GetExtension(thisItem.Name);
string searchExt = string.Empty;
if (ext == ".cpp" || ext == ".c")
searchExt = ".h";
else if (ext == ".h" || ext == ".hpp")
searchExt = ".cpp";
else
return(string.Empty);
string searchItemName = thisItem.Name;
searchItemName = Path.ChangeExtension(searchItemName, searchExt);
Project proj = thisItem.ContainingProject;
foreach(ProjectItem item in proj.ProjectItems)
{
ProjectItem foundItem = FindChildProjectItem(item, searchItemName);
if (foundItem != null)
{
if (openAndActivate)
{
if (!foundItem.get_IsOpen(Constants.vsViewKindCode))
{
Window w = foundItem.Open(Constants.vsViewKindCode);
w.Visible = true;
w.Activate();
}
else
{
foundItem.Document.Activate();
}
}
return(foundItem.Document.FullName);
}
return(string.Empty);
}