Получить самое длинное имя
Мне нужен каталог с самым длинным именем. В 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
Конечно, я получаю: "Выражения не дают значения". Как исправить последнюю строку для сортировки по длине (самая длинная первая) и взять первую (самую длинную).
2 ответа
Решение
Давайте попробуем это (без использования 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 не возвращает ничего, как указано в сообщении об ошибке. Вместо этого он просто сортирует массив на месте. Тогда я могу просто получить последний.
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