C# 使用TFS SDK从TFS获取所有文件夹
我正在创建一个TFS工具,它将从TFS服务器获取“变更集信息” 现在,我想提供一个“TFS浏览器”,以便用户可以浏览他想要从中获取信息的“分支/文件夹” 我正在使用TreeView控件和GetItems函数从TFS获取项目的路径:C# 使用TFS SDK从TFS获取所有文件夹,c#,treeview,iostream,tfs-sdk,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 recurs
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参数是文件,
返回一组包含
就是那个文件。如果路径是
文件夹中,返回一组
包含该文件夹中的所有项目。如果
路径包含一个通配符
字符,返回中的一组项
与指定文件夹匹配的指定文件夹
通配符
但是,每次调用GetItems大约需要一秒钟,如果一个文件夹包含多个文件,则节点的“扩展”将永远耗时
那么,有没有办法从TFS获取所有“文件夹”?或者其他如何检查路径是文件夹还是文件的方法
谢谢 我刚刚找到的一个解决方案是使用GetFileTypes方法检索服务器上注册的不同扩展名。然后对照这些扩展检查每个“项”,如下所示:
if (!Extensions.Contains(Path.GetExtension(item.ServerItem).Replace(".","").ToLower()))
{
//Add Node
}
然而,这并不是真正的万无一失。如果文件夹名为folder.DLL怎么办?似乎有一个名为.ItemType的成员。你可以检查一下。你是达曼·伊恩-我正在实施几乎相同的想法,我正在利用“on”的索引,这让我很不高兴。。。很好的电话+1在这个和你的原创上!