2010-05-07 55 views
0

我正在使用Visual Studio 2005 C#製作一個插件,以便在源文件和頭文件之間輕鬆切換,以及所有遵循類似命名結構的腳本文件。但是,目錄結構將所有文件放在不同的位置,即使它們都在同一個項目中。如何在Visual Studio 2005加載項中查找並打開文件?

我幾乎已經掌握了所有這些部分,但我無法弄清楚如何僅在僅基於文件名的解決方案中查找和打開文件。所以我知道我來自c:\ code \ project \ subproject \ src \ blah.cpp,我想打開c:\ code \ project \ subproject \ inc \ blah.h,但是我不'不一定知道blah.h在哪裏。我可以對不同的目錄路徑進行硬編碼,但該實用程序的通用性不夠強大。

該解決方案有多個項目,這似乎也有點痛苦。我在這一點上想,我必須遍歷每個項目,並遍歷每個項目項目,以查看特定文件是否在那裏,然後獲得適當的參考。

但在我看來,必須有一個更簡單的方法來做到這一點。

回答

1

要一般爲任何用戶的文件結構工作,您需要枚舉所有項目中的所有文件。這應該讓你開始。而且,嗯,差不多完成了:-)

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); 
    } 

請注意,這是可能的頭在include路徑沒有被添加到項目中,因此,如果上面的失敗,你可能看在也包含包含項目的路徑。我將把它作爲讀者的練習。

相關問題