2014-01-22 3 views
0

기본적으로 지정된 경로에 foreach 폴더를 열려고 시도합니다. 예 : - 지정 경로에 "A"라는 폴더가 있고이 폴더 안에 "B1" "B2" "B3"이라는 다른 폴더가 있으므로 그 폴더 안에 "C"라는 다른 폴더가 있습니다. foreach "C"폴더에 "D"라는 파일이 있습니다. "B"폴더를 콤보 상자에 넣고 "D"파일을 열 폴더를 선택하려고합니다.C# 파일 foreach 폴더 찾기

A > B1 > C > D.txt 
    > B2 > C > D.txt 
    > B3 > C > D.txt 

등등. 이 문제를 해결하도록 도와주세요.

var tfs = 
TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(path)); 
var vcs = tfs.GetService<VersionControlServer>(); 
    private void PopulateTreeView() 
    { 
     var tfs = 
      TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://tfs2012:8080/tfs/DefaultCollection_2010/")); 
     var vcs = tfs.GetService<VersionControlServer>(); 
     var workspace = vcs.QueryWorkspaces(workspaceName, vcs.AuthorizedUser, Environment.MachineName)[0]; 
     _workspace = workspace; 
     tvWksNavigator.Nodes.Clear(); 
      var info = new DirectoryInfo(workspace.Folders[10].LocalItem); 
      if (info.Exists) 
      { 
       var rootNode = new TreeNode(info.Name) { Tag = info }; 
       TreeNode bNode; 
       DirectoryInfo[] subSubDirs; 
       foreach (var subDir in info.GetDirectories().Where(c => c.Name=="Media")) 
       { 
        bNode = new TreeNode(subDir.Name, 0, 0); 
        bNode.Tag = subDir; 
        subSubDirs = subDir.GetDirectories(); 

        if (subSubDirs.Length != 0) 
        { 
         GetDirectories(subSubDirs, bNode); 
        } 
        rootNode.Nodes.Add(bNode);    
       } 
       tvWksNavigator.Nodes.Add(rootNode); 
      } 
    } 

    private void GetDirectories(DirectoryInfo[] subDirs, 
     TreeNode nodeToAddTo) 
    { 
     TreeNode aNode; 
     DirectoryInfo[] subSubDirs; 
     foreach (var subDir in subDirs) 
     { 
      aNode = new TreeNode(subDir.Name, 0, 0); 
      aNode.Tag = subDir; 
      aNode.ImageKey = "folder"; 
      subSubDirs = subDir.GetDirectories(); 

      if (subSubDirs.Length != 0) 
      { 
       GetDirectories(subSubDirs, aNode); 
      } 
      nodeToAddTo.Nodes.Add(aNode); 
     } 
    } 
+0

트리보기를 만들었지 만 각 폴더의 특정 위치를 가져올 수 없습니다. – user1415791

+0

코드를 표시하십시오. – DaveDev

+0

네, 지금까지 가지고있는 것을 보여주십시오. 또한 폴더 구조를 항상 알고 있습니까? B4가 있을까요? 트리가 C를 넘어 디렉토리로 확장 될 수 있습니까? – MattR

답변

0

다음은 당신을 이끌 수있는 예입니다.

private void foldersCB_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string selectedItem = foldersCB.SelectedItem.ToString(); 
    string filePath = GetFileFromFolder(selectedItem); 
    //open the file using 'filePath' 
} 

:

private void FillComboBox() 
{ 
    foreach(string dir in Directory.GetDirectories(@"C:\Temp\A")) 
    { 
     DirectoryInfo info = new DirectoryInfo(dir); 
     //foldersCB is the Name of the ComboBox 
     foldersCB.Items.Add(info); 
    } 
} 

다음은 다른 폴더가 콤보 상자에서 선택되는 경우에 대한 이벤트가 필요합니다, 우리는의 SelectedIndexChanged 이벤트를 사용합니다 : 첫째, 폴더 A 내 폴더와 콤보 상자를 채울

private string GetFileFromFolder(string path) 
{ 
    string fileName = Directory.GetFiles(path, "*D.txt", SearchOption.AllDirectories).FirstOrDefault(); 
    return fileName; 
} 

하십시오 : 그리고 GetFileFromFolder() 단순히 D.txt로 끝나는 경로와 일치하는 첫 번째 파일 이름을 얻을 것이다 방법은 이것은 단지 당신이 완벽한 솔루션이 아니라 갈 수 있도록 해주는 예일뿐입니다! 예를 들어 파일이 실제로 선택한 폴더의 하위 폴더에 있는지 확인해야하는 경우 별도의 유효성 검사를 직접 작성해야합니다. 희망이 도움이됩니다.

+0

감사합니다. 매우 감사드립니다. – user1415791