Вот такое вот задание. Есть динамический массив типа Byte в него загружена информация свыше 32Mb необходимо вывести все эти байты на экран.
Dim sData() As Byte
Private Sub Obr()
Dim iSize As Long
iSize=FileLen("C:\FileName.bin")
ReDim sData(iSize)
Open "C:\FileName.bin" For Binary Access Read As #1
Get #1,,sData
Close #1
End Sub
Если использовать какие либо циклы то это надо обрабатывать каждое значение в массиве так и к концу света не закончишь. Посоветуйте.
вообще массив ненужен здесь! Зачем для вывода на экран в массив? Темболее если файл большой, то объявлять массив равным размеру файла бред... оперативка не резиновая же..
а зачем именно в массве? И строку вывести можно...
Это задание у меня такое препод у меня немного того
Советую: не преобразовывай весь массив сразу. Только то, что поместится на экран. Когда надо вывести следующий кусок информации - преобразуешь его.
А если требуется сразу перейти на середину или на конец. Чито тогда делать.
вообще массив ненужен здесь! Зачем для вывода на экран в массив? Темболее если файл большой, то объявлять массив равным размеру файла бред... оперативка не резиновая же..
Файл имеет размер от 14mb до 62mb.
Вообщем посоветуйте как мне вывести файл на экран в виде байт.
примерно вот так:
255 15 44 58 69 245 200 128 и т.д.
HACKER, в массиве могут быть непечатные символы, типа 0. В какой строке ты их собрался выводить?
Чито тогда делать
Переходить к середине, брать байты из середины в количестве, достаточном для заполнения экрана, преобразовывать в строки вида "255 15 44 58 69 245 200 128" и показывать их.
Чито тогда делать
Переходить к середине, брать байты из середины в количестве, достаточном для заполнения экрана, преобразовывать в строки вида "255 15 44 58 69 245 200 128" и показывать их.
Например в текстбоксе. Или в ричедите. А самый лучший вариант - в virtual listview. Он у тебя сам запросит строки, сообщив, с которой по которую ему нужно отображать.
При чтении файла, в Get можно указывать какой именно байт прочитать из файла, это решает
Это понятно просто надо каждый раз к файлу обращатся.Как то не входит в планы задания.
Просто объявлять массив на 62 мб...
62*1024*1024=33554432 т.е.
ReDim sData(33554432) как бы многовато что ли...
Ну это смотря у кого сколько оперы.
Например в текстбоксе. Или в ричедите. А самый лучший вариант - в virtual listview. Он у тебя сам запросит строки, сообщив, с которой по которую ему нужно отображать.
В текстбоксе или в ричедите надо как то визуально создать ScrollBar чтоб можно было бегать по кускам. А вот насчет virtual listview можно поподробней.
virtual listview - это листвью, созданный на API, с указанием стиля LVS_OWNERDATA. Специально для больших объемов информации. Сам листвью информации не хранит, поэтому памяти не расходует. Он знает только количество итемов (строк), которое он должен отображать. Когда ему нужно отобразить своё содержимое (например при перерисовке окна, или когда юзер тянет скроллбар), он посылает родителю (форме) сообщение WM_NOTIFY с нотификационным кодом LVN_GETDISPINFO. С этим сообщением он также указывает, с какой по какую строку ему надо отобразить. Например в лист влезает 20 строк, и ему нужна информация об этих строках, чтобы отобразить их. Для каждой строки, требующей отображения он пришлет сообщение, на которое нужно подготовить из набора байт читабельную строку и вернуть ему эту готовую строку. Которую он отобразит. Подготовить 20 строк - делается быстро, никаких задержек нет. Так что нужен только массив самих байт, преобразованное в строку хранить необходимости нет, все преобразовывается в строковый вид по ходу отображения.
Это специальный способ для того, чтобы не загромождать память информацией, которая не требуется в данный момент.