2016-05-14 36 views
0

我需要名称最长的目录。在RootDir中可能有几个名称以“8000”开头的目录。我想要名称最长的DirectoryInfo。获取最长名称

Dim pCustID As String = "8000" 
    Dim RootDir As New DirectoryInfo(CustPdfPath) 
    Dim dirs() As DirectoryInfo 
    dirs = Array.FindAll(RootDir.GetDirectories, Function(x) x.Name.StartsWith(pCustID)) 
    Dim myDir As DirectoryInfo = Array.Sort(RootDir.GetDirectories, _ 
       Function(x As DirectoryInfo, y As DirectoryInfo) _ 
       x.Name.Length > y.Name.Length).firstordefault 

当然,我得到:“表达式不会产生一个值”。我如何修复最后一行,按照长度排序(最长),然后选取第一条(最长)。

+0

让我澄清一下,你告诉我,如果我是正确的......你想得到最长的目录名称给定一个以8000开头的起始路径?那么所有的子目录呢? – Codexer

+0

没错。只需忽略子目录。 –

回答

1

让我们试试这个(不使用一个DirectoryInfo)

Dim pCustID As String = "8000" 
Dim RootDir As String = CustPdfPath 
Dim longest = Directory.GetDirectories(RootDir) _ 
       .Where(Function(x) x.StartsWith(RootDir & "\" & pCustID)) _ 
       .OrderByDescending(Function(x) x.Length) _ 
       .FirstOrDefault() 

或一个DirectoryInfo

Dim pCustID As String = "8000" 
Dim RootDir As New DirectoryInfo(CustPdfPath)  
Dim longest = di.GetDirectories() _ 
       .Where(Function(x) x.Name.StartsWith(pCustID)) _ 
       .OrderByDescending(Function(x) x.Name.Length) _ 
       .FirstOrDefault() 
+0

DirectoryInfo的第二个工作正常。谢谢。第一个没有返回任何错误。它应该返回路径或DirectoryInfo不知道哪个。 –

+0

好了,修好了第一个。实际上不需要GetFileName – Steve

0

我发现我的错误的原因。 Array.Sort不会像返回错误信息那样返回任何内容。相反,它只是对数组进行排序。然后,我可以得到最后一个。

Dim RootDir As New DirectoryInfo(CustPdfPath) 
    Dim dirs() As DirectoryInfo 
    dirs = Array.FindAll(RootDir.GetDirectories, Function(x) x.Name.StartsWith(CustPath)) 
    Array.Sort(RootDir.GetDirectories, _ 
       Function(x As DirectoryInfo, y As DirectoryInfo) x.Name.Length < y.Name.Length) 
    Dim myDir As DirectoryInfo = dirs.LastOrDefault