5

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 引数がファイルの場合、そのファイルだけを含むアイテムのセットを返します。パスがフォルダーの場合、そのフォルダー内のすべてのアイテムを含むアイテムのセットを返します。パスにワイルドカード文字が含まれている場合、ワイルドカードに一致する指定されたフォルダー内のアイテムのセットを返します。

ただし、GetItems の各呼び出しには約 1 秒かかり、フォルダーに複数のファイルが含まれている場合、ノードの「展開」には永遠にかかります。

では、TFS からすべての「フォルダー」を取得する方法はありますか? または、パスがフォルダーかファイルかを確認する方法はありますか?

ありがとう!

4

2 に答える 2

2

Itemには.ItemTypeというメンバーがあるようです。あなたはそれに対してチェックすることができます。

于 2010-02-10T11:19:41.337 に答える
0

私が見つけた 1 つの解決策は、GetFileTypesメソッドを使用して、サーバーに登録されているさまざまな拡張子を取得することです。次に、これらの拡張機能に対してすべての「アイテム」を次のようにチェックします。

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

ただし、これは本当にばかげた証拠ではありません。フォルダの名前が FOLDER.DLL の場合はどうなりますか?

于 2010-02-09T11:15:59.587 に答える