获取最长的名字

Get Longest Name

我需要名字最长的目录。在 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

我当然得到:"Expressions does not produce a value"。如何修复最后一行以按长度排序(最长在前)并取第一个(最长)。

让我们试试这个(不使用 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()

我发现了错误的原因。 Array.Sort 没有 return 任何像错误消息所说的那样。相反,它只是就地对数组进行排序。那我只能拿最后一个了

    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