2011-03-09 62 views
3

我不是P4.NET和我的專家想顯示Perforce公司的倉庫在一個TreeView (windowsform應用C#)...顯示Perforce公司的TreeView中的倉庫在使用C#

*「P4迪爾斯」讓所有車廠=> P4迪爾斯‘// *’爲爲例,這可能給 depot1 depot2 ..等

P4Connection p4 = new P4Connection(); 
p4.Connect(); 
P4RecordSet tab1 = p4.Run("dirs","//depot/*"); // to get folders in depot 
foreach (P4Record a in tab1) 
{ 
    richTextBox1.Text += (a["dir"]) + "\n";// show the results in richTextBox 

} 

*要獲得目錄中的文件列表,運行FSTAT = > p4 fstat「// depot1/*」

P4RecordSet tab2 = p4.Run("fstat","//depot/your_folder/*"); // to get files existing in your_folder 
foreach (P4Record b in tab2) 
{ 
    richTextBox1.Text += (b["depotFile"]) + "\n";// show the results in richTextBox 

} 

現在,如何使用此代碼來構建treeview?任何幫助將是最受歡迎的

回答

1

下面的代碼將只支持硬編碼的軟件倉庫,但使用「軟件倉庫」命令查看Perforce服務器上的所有軟件倉庫並不難。

public void PopulateTreeview() 
{ 
    TreeNode depotNode = new TreeNode("//depot"); 

    P4Connection p4 = new P4Connection(); 
    p4.Connect(); 

    ProcessFolder(p4, "//depot", depotNode); 

    treeView.Nodes.Add(depotNode); 
} 

public void ProcessFolder(P4Connection p4, string folderPath, TreeNode node) 
{ 
    P4RecordSet folders = p4.Run("dirs", folderPath + "/*"); 
    foreach(P4Record folder in folders) 
    { 
     string newFolderPath = folder["dir"]; 
     string[] splitFolderPath = newFolderPath.Split('/'); 
     string folderName = splitFolderPath[splitFolderPath.Length - 1]; 

     TreeNode folderNode = new TreeNode(folderName); 
     ProcessFolder(p4, newFolderPath, folderNode); 

     node.Nodes.Add(folderNode); 
    } 

    P4RecordSet files = p4.Run("fstat", folderPath + "/*"); 
    foreach(P4Record file in files) 
    { 
     string[] splitFilePath = file["depotFile"].Split('/'); 
     string fileName = splitFilePath[splitFilePath.Length - 1]; 

     TreeNode fileNode = new TreeNode(fileName); 
     node.Nodes.Add(fileNode); 
    } 
} 
+0

感謝您的回答,此解決方案適用於數量有限的文件,但在我們公司,我們有超過600 000個文件......使用此代碼無法顯示洞庫,它需要很多時間。 任何想法如何解決這個問題?? – appiger 2011-07-21 09:56:36

+0

我認爲解決這個問題的唯一方法就是擺脫遞歸,所以你不會試圖一次性解析整個Perforce樹。相反,您可以監聽節點何時展開,然後在該節點上運行ProcessFolder。 – 2011-07-21 16:00:09

+0

非常感謝你:)它的作品。 – appiger 2011-07-22 10:43:35