2011-03-09 39 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