2017-02-10 3 views
0

Я пытаюсь прочитать последние несколько байтов файла Microsoft Word. Я получаю следующее сообщение об ошибке на линии MyStr = Input(64, #1)Ошибка времени выполнения 62 Входной конец файла

Ошибка выполнения 62 Ввод после конца файла

Sub Document_Open() 
Dim f As Document 
Set f = ActiveDocument 
MsgBox f.Name 
Dim MaxSize, NextChar, MyStr, EndSize 
Open f.Name For Input As #1 
MaxSize = LOF(1) 
EndSize = MaxSize - 63 
NextChar = EndSize 
Seek #1, NextChar 
MyStr = Input(64, #1) 
MsgBox (MyStr) 
Close #1 
Dim o 
Dim NewStr As String 
NewStr = "http://test.com/?rid=" + MyStr + "&type=doc" 
Set o = CreateObject("MSXML2.ServerXMLHTTP") 
o.Open "GET", NewStr, False 
o.send 
MsgBox (o.responsetext) 
Dim IE 
Set IE = CreateObject("InternetExplorer.Application") 
IE.navigate ("https://en.wikipedia.org/") 
IE.Visible = True 
End Sub 
+0

Это, кажется, не так. Я изменил его и попытался прочитать только 1 байт, и он все еще показывает ту же ошибку – hax

ответ

0

Input # предназначен для использования файлов, что были созданы с Write #, и результат получает «разобран», поскольку он читается. Вы можете получить более подробную информацию в documentation. Документы Word - это двоичные файлы, поэтому это создаст все проблемы. Последние 64 байт случайного .docx файла, как-то вроде этого:

00 00 08 06 00 00 12 00 00 00 00 00 00 00 00 00 
00 00 00 00 20 E2 01 00 77 6F 72 64 2F 66 6F 6E 
74 54 61 62 6C 65 2E 78 6D 6C 50 4B 05 06 00 00 
00 00 0F 00 0F 00 DF 03 00 00 42 E4 01 00 00 00 

Итак, вам нужно открыть файл For Binary. Затем вы можете просто просто втянуть его в строку с фиксированной длиной Get.

Обратите внимание, что вы также должны использовать FreeFile вместо жесткого закодированных дескрипторов файлов:

Dim handle As Integer 
handle = FreeFile 
Open f.Name For Binary Access Read As handle 

Dim last64Bytes As String * 64 
Get handle, LOF(handle) - 64, last64Bytes 

Debug.Print last64Bytes 

Close handle 
Смежные вопросы