2010-02-09 48 views
5

Tôi đang tạo công cụ TFS sẽ nhận được "thông tin thay đổi" từ máy chủ TFS.Nhận tất cả thư mục từ TFS bằng TFS SDK

Bây giờ, tôi muốn cung cấp "Trình duyệt TFS" để người dùng có thể duyệt "nhánh/thư mục" nào mà anh muốn tìm nạp thông tin.

Tôi đang sử dụng một điều khiển TreeView và GetItems chức năng để có được con đường của các mục từ 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); 
     } 
    } 
} 

Đoạn code dưới đây chứng minh rằng sau khi nhấp vào 'mở rộng' nút từ một nút, ứng dụng sẽ "truy vấn" các mục nằm dưới "nhánh" hiện tại (e).

Tuy nhiên, tôi không muốn đưa tệp vào trình duyệt. Là một kiểm tra nhanh chóng và bẩn, tôi kiểm tra xem "đường dẫn" có phần mở rộng hay không và giả sử rằng nó là một thư mục và hiển thị nó. Tất cả đều tốt cho đến khi tôi phát hiện ra rằng chúng tôi có một thư mục có tên "v1.1".

Có một giải pháp. Tôi có thể gọi lại GetItems và kiểm tra nội dung của nó. Theo MSDN:

Nếu đối số đường dẫn là tệp, trả về tập hợp các mục có chứa chỉ là tệp đó. Nếu đường dẫn là thư mục , hãy trả lại một tập hợp các mục chứa tất cả các mục trong thư mục đó. Nếu đường dẫn chứa ký tự đại diện , trả về một tập hợp các mục trong thư mục được chỉ định khớp với ký tự đại diện .

Tuy nhiên, mỗi cuộc gọi tới GetItems mất khoảng một giây và nếu một thư mục chứa nhiều tệp thì "mở rộng" của nút sẽ mất vĩnh viễn.

Vì vậy, có cách nào để chỉ nhận tất cả "thư mục" từ TFS không? Hoặc bất kỳ ý tưởng khác làm thế nào để kiểm tra xem một con đường là một thư mục hoặc một tập tin?

Cảm ơn!

Trả lời

2

Dường như có một thành viên được gọi là .ItemType cho mục. Bạn có thể kiểm tra lại điều đó.

+1

Bạn da man Ian - Tôi đang triển khai khá nhiều ý tưởng tương tự này, tôi đang trong quá trình sử dụng chỉ mục về "." mà tôi không hài lòng về ... cuộc gọi tốt ở đây ... +1 về điều này và bản gốc của bạn! – dbobrowski

0

Một giải pháp mà tôi vừa tìm thấy là sử dụng phương thức GetFileTypes để truy xuất các tiện ích khác nhau được đăng ký trên máy chủ. Sau đó, kiểm tra từng "mục" đối với các tiện ích mở rộng này như vậy:

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

Tuy nhiên, đây không thực sự là bằng chứng lừa. Nếu một thư mục có tên FOLDER.DLL thì sao?

Các vấn đề liên quan