使用TFS SDK从TFS获取所有文件夹

时间:2010-02-09 10:53:37

标签: c# treeview iostream tfs-sdk

我正在创建一个TFS工具,它将从TFS服务器获取“变更集信息”。

现在,我想提供一个“TFS浏览器”,以便用户可以浏览他想从中获取信息的“分支/文件夹”。

我正在使用TreeView控件和 GetItems 函数从TFS获取项目的路径:

private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
    e.Node.Nodes.RemoveAt(0);
    RecursionType recursion = RecursionType.OneLevel;
    Item[] items = null;

    // Get the latest version of the information for the items.
    ItemSet itemSet = sourceControl.GetItems(e.Node.Tag.ToString(), recursion);
    items = itemSet.Items;

    foreach (Item item in items)
    {
        if (item.ServerItem == e.Node.Tag.ToString()) //Skip self
            continue;

        string filename = Path.GetFileName(item.ServerItem);

        if (Path.GetExtension(filename) == "")
        {
            TreeNode node = new TreeNode(filename, new TreeNode[] { new TreeNode() });
            node.Tag = item.ServerItem;
            e.Node.Nodes.Add(node);
        }
    }
}

下面的代码演示了点击节点中的“展开”按钮后,应用程序将“查询”当前“分支”(e)下方的项目。

但是,我不想将文件包含在浏览器中。作为快速和脏检查,我正在检查“路径”是否有扩展名,如果没有,则假设它是一个目录并显示它。一切都很好,直到我发现我们有一个名为“v1.1”的文件夹。

有一个解决方案。我可以重新调用GetItems并检查其内容。根据MSDN:

  

如果path参数是文件,   返回包含的一组Items   只是那个文件。如果路径是   文件夹,返回一组Items   包含该文件夹中的所有项目。如果   该路径包含一个通配符   character,返回一组Items   与之匹配的指定文件夹   通配符。

但是,每次调用GetItems大约需要一秒钟,如果一个文件夹包含多个文件,节点的“扩展”将永远占用。

那么,有没有办法从TFS获取所有“文件夹”?或者任何其他想法如何检查路径是文件夹还是文件?

谢谢!

2 个答案:

答案 0 :(得分:2)

似乎有一个名为.ItemType的成员用于Item。你可以检查一下。

答案 1 :(得分:0)

我刚刚找到的一个解决方案是使用 GetFileTypes 方法检索服务器上注册的不同扩展。然后检查每个“项目”对照这些扩展名,如下所示:

if (!Extensions.Contains(Path.GetExtension(item.ServerItem).Replace(".","").ToLower()))
{
    //Add Node
}

然而,这并非真正的万无一失。如果文件夹名为FOLDER.DLL?

,该怎么办?