3

私は P4.NET の専門家ではなく、perforce のデポをツリービュー (windowsform アプリケーション c#) で表示したいと思います...

* "p4 dirs" ですべてのデポを取得 => p4 dirs "//*" たとえば、これにより depot1 depot2 ..etc が得られる場合があります

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

}

さて、このコードを使用してツリービューを構築する方法は? どんな助けでも大歓迎です

4

1 に答える 1

1

以下のコードはハードコードされたデポのみをサポートしますが、「depots」コマンドを使用して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);
    }
}
于 2011-03-15T05:47:11.423 に答える