Я пытаюсь восстановить большую партию поврежденных файлов .docx
в классическом asp.Как исправить поврежденные файлы docx программно (добавление отсутствующих байтов)
(В конце файла отсутствуют байты в конце - как указано в this question).
Когда я смотрю на файл в Sublime (который показывает его в шестнадцатеричном представлении), повреждение можно устранить, добавив 0000
в конец файла.
Но я изо всех сил, чтобы добавить эти 4 нулей на конце, программно.
Я пытаюсь использовать cByteArray класс, использование которого, как это:
With oByte
Call .AddBytes(LoadBytes(sFilePath))
Call .AddBytes(HOW DO I GET THE BYTE VALUE OF 0000 HERE?)
lngBytes = .BytesTotal
ByteArray = .ReturnBytes
End With
Call SaveBytesToBinaryFile(ByteArray, sNewFilePath)
Я не могу работать, как получить значение 0000
в метод .AddBytes()
.
Как это сделать? Я немного не в своей глубине и не уверен, что я даже приближаюсь к этому правильно.
В своем невежестве, вот что я пробовал:
Redimming ByteArray
оставив лишние байты пустой (потому что я думаю, что 0000
представляют нулевые значения).
Это, похоже, совсем не изменяет файл. Новый сохраненный файл идентичен старому файлу.
With oByte
Call .AddBytes(LoadBytes(sFilePath))
ByteArray = .ReturnBytes
End With
arrayLength = ubound(ByteArray)
redim ByteArray(arrayLength + 2)
Call SaveBytesToBinaryFile(ByteArray, sNewFilePath)
Преобразование 0000
из шестнадцатеричной в байтах и добавление его в испорченных байт.
Опять же, похоже, что это вообще не изменяет файл.
dim k, hexString, str, stream, byteArrToAdd
hexString = "000000"
For k = 1 To Len(hexString) Step 2
str = str & Chr("&h" & Mid(hexString, k, 2))
response.write "<hr />" & str & "<hr />"
Next
Set stream = CreateObject("ADODB.Stream")
With stream
.Open
.Type = 2 ' set type "text"
.WriteText str
.Position = 0
.Type = 1 ' change type to "binary"
byteArrToAdd = .Read
.Close
End With
set stream = nothing
With oByte
Call .AddBytes(LoadBytes(sFilePath))
Call .AddBytes(byteArrToAdd)
ByteArray = .ReturnBytes
End With
Call SaveBytesToBinaryFile(ByteArray, sNewFilePath)
Получение последний байт поврежденного файла, и добавление его в 2-х новых значений после redimming ByteArray.
Это, похоже, вообще не изменяет файл!
With oByte
Call .AddBytes(LoadBytes(sFilePath))
ByteArray = .ReturnBytes
End With
arrayLength = ubound(ByteArray)
finalByte = ByteArray(arrayLength)
redim ByteArray(arrayLength + 2)
ByteArray(arrayLength + 1) = finalByte
ByteArray(arrayLength + 2) = finalByte
Call SaveBytesToBinaryFile(ByteArray, sNewFilePath)
Вы должны иметь возможность добавлять их с помощью 'ChrB()', что-то вроде '.AddBytes вызовов (ChrB (& H00) & ChrB (& H00))' должна работать. – Lankymart
Я не мог заставить это работать. То же самое для 'ControlChars.NullChar' - не добавлено ни одного байта в файл. Считаете ли вы, что это связано с этим? http://www.vbforums.com/showthread.php?628175-CHR(-amp-H00)-vs-CHR-(-amp-H00) (к сожалению, там нет решения) –
Прошу прощения за человека. ..Все еще используя классический asp в ноябре 2017 года:/ – 2Noob2Good