.net GetDetailsOf shell32.folderitem из строки

Я пытаюсь получить разрешение файла изображения или видео с помощью GetDetailsOf в vb.net, но я не понимаю, как загрузить файл в shell32.folderitem, поэтому я делаю это очень окольным путем.

    OpenFileDialog1.ShowDialog()
    Dim fi As New FileInfo(OpenFileDialog1.FileName)

    Dim shell As New Shell32.Shell
    Dim objFolder As Shell32.Folder

    objFolder = shell.NameSpace(fi.DirectoryName)
    For i As Integer = 0 To objFolder.Items.Count - 1
        If objFolder.Items(i).name = fi.Name Then

            Console.WriteLine(objFolder.GetDetailsOf(objFolder.Items(i), 31))
            Console.WriteLine(objFolder.GetDetailsOf(objFolder.Items(i), 282))
            Console.WriteLine(objFolder.GetDetailsOf(objFolder.Items(i), 280))
        End If
    Next

Я просто зацикливаюсь на папке, пока не найду соответствие для своего файла. Есть ли более чистый и быстрый способ сделать это? Мне просто нужно иметь shell32.FolderItem из полного имени файла.

Кроме того, могу ли я полагаться на то, что Деталь 31 всегда будет разрешением, а 280/282 - высотой кадра / шириной кадра? Как я могу узнать, будут ли они получать те же данные на других компьютерах, не проверяя их на других компьютерах?

Благодарю.

2 ответа

Решение
    Dim fi As New FileInfo(fileName)
    Dim shl As Shell32.Shell = New Shell32.Shell
    Dim dir As Shell32.Folder = shl.[NameSpace](fi.DirectoryName)
    Dim itm As Shell32.FolderItem = dir.Items().Item(fi.Name)
    Dim itm2 As Shell32.ShellFolderItem = DirectCast(itm, Shell32.ShellFolderItem)


    Dim str As String = dir.GetDetailsOf(itm2, 31)

Это заставило его работать без поиска файла. 31 возвращает размеры изображения для меня. DirectoryInfo не имеет всех метаданных, которые имеет shell32 "getdetailsof".

Есть ли более чистый и быстрый способ сделать это?

Примерно так должно работать:

Imports System.IO

    Dim test() As FileSystemInfo = New DirectoryInfo("MyDirectoryPath").GetFileSystemInfos("MyImageFile")
    'MyImageFile is actually a search pattern string.  the result is an array 
    'containing info on every file in the folder that matches the search pattern.
    'If the pattern is unique then only one file will be returned and using
    'the FullName property will return the full path to the file.
    test(0).FullName()
    'Or just the Name property to return just the file name
    test(0).Name()
Другие вопросы по тегам