Вчера как и было подсказано заменил Write на Put.
И сразуже заметил несколько багов присущих даже такому элементарному способу.
- Код: Выделить всё
Private Sub Command1_Click()
Dim Buff() As Byte
Dim FileSize As Long
'откроем файл
Open "c:\00000489.JPG" For Binary As #1
'узнаем его размер
FileSize = LOF(1)
'сделаем массив размером с файл
ReDim Buff(FileSize)
'считаем файл в массив
Get #1, , Buff()
'задаем новый файл
NewFile = FreeFile
Open "c:\rezult.jpg" For Binary As #NewFile
'записываем в новый файл наш массив
Put #NewFile, , Buff()
'закроем все файлы
Close #NewFile
Close #1
End Sub
В этом варианте заметилось следующее:
В результате получается файл на 1 байт больше положеного. Как оказалось массив элементов начинается не с 1 а с 0 в результате чего при переопределении массива размеров с исконный файл мы получим FileSize + 0й байт в начале массива.
Это можно исправить переназначая массив как ReDim Buff(1 To FIleSize) тоесть исключая нулевую ячейку самого массива.
Но и это оказалось не без бага. Ибо если откроется файл 0-го размера (пустой) получится ReDim Buff(1 To 0) ну и ошибка соответственно. Да и переназначить массив 0-м размером тоже не получится ибо он просто обязан содержать хотябы один элемент и никак иначе, пусть даже это 00h.
Одним словом насколь я смог понять придется либо после FileSize = LOF(1) ставить условия и ветвить либо формирование массива либо его обход без создания массива.
Если есть какой более простой способ более коректного обхождения таких ситуаций, подскажите.