VB считывает смещения заголовка файла, чтобы получить значения для определения типа файла старых расширений Microsoft - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь разрешить расширение типа файла, прочитав в Visual Basic заголовок файла.У меня проблемы с определением типа файла старых расширений, таких как .pub .vsd .doc .msg .xls ... Я должен прочитать подзаголовок.Я попытался сделать это с помощью byteArray (512), byteArray (513), byteArray (514), byteArray (515) для смещения, как на опубликованном изображении.

, но смотреть самостоятельно

Функция, котораяпрочитайте заголовок:

 Private Shared Function ReadHeader(filePath As String) As Int64

    Dim byteArr(520) As Byte

    Using fsIn = New IO.FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)
        fsIn.Read(byteArr, 0, byteArr.Length)
    End Using

    Dim result As Int64 = CLng((byteArr(0) * 2 ^ 24) + (byteArr(1) * 2 ^ 16) + (byteArr(2) * 2 ^ 8) + (byteArr(3) * 2 ^ 0))

    Return result

End Function

Моя проблема в том, что когда я вычисляю числовые значения в этом случае, я не могу определить тип, потому что мой результат всегда один и тот же.вот так.С новыми расширениями файлов у меня та же проблема, но другое решение, потому что они заархивированы.Мне просто нужно прочитать структуру файла следующим образом:

Enum FileTypesEXT as Int64
   New_MicrosoftExtension = 1347093252
    'DOCX = 1347093252
    'XLSX = 1347093252
    'PPTX = 1347093252
    'EXCELXM = 1347093252   
    'EXCELX = 1347093252
    'EXCELXB = 1347093252
    'WORDX = 1347093252
    'WORDXT = 1347093252

  OLD_MicrosoftExtension = 3503231456
    'MSG = 3503231456
    'DOC = 3503231456
    'XLS = 3503231456
    'VSD = 3503231456
    'PUB = 3503231456
    'PPT = 3503231456
    'WPF = 3503231456
End Enum

 Case FileTypesEXT.New_MicrosoftExtension //NewMicrosoftOfficeExt everytime 1347093252
            Using z = System.IO.Compression.ZipFile.OpenRead(filePath)
                For Each entry In z.Entries
                    If entry.FullName.StartsWith("word/") Then
                        NewFileExtension = "docx"
                    ElseIf entry.FullName.StartsWith("ppt/") Then
                        NewFileExtension = "pptx"
                    ElseIf entry.FullName.StartsWith("xl/") Then
                        NewFileExtension = "xlsx"
                        Exit For
                    End If
                Next
            End Using
            ...

Теперь я нашел источник, который говорит мне, что я могу читать смещения заголовка, чтобы прочитать подзаголовок

записи подзаголовка

Я пытался прочитать byteArray (512), byteArray (513), byteArray (514), byteArray (515) до byteArr (20).Могу ли я сделать это так или я ошибся с показателями?

     If result = 3503231456 Then
        Dim checkOffset As Int64 = CLng((byteArr(512) * 2 ^ 24) + (byteArr(513) * 2 ^ 16) + (byteArr(514) * 2 ^ 8) + (byteArr(515) * 2 ^ 0))

        If checkOffset = 3970285824 Then
            result = 3970285824 'DOC
        ElseIf checkOffset1 = 1375760128 Then
            result = 1375760128 'MSG
        ...

Может быть, есть другое решение?Пожалуйста, дайте мне знать :) Я надеюсь, что я объясню мою проблему по этому вопросу, и вы можете работать с этим

РЕДАКТИРОВАТЬ:

Вот мои результаты: (У меня проблемыопределить ".ppt", потому что я получаю много разных значений для файлов, которые ".ppt")

...