Строки это хорошо, вот только например chr(0) или chr(27) в них не увидишь.
Вот кусок из моей старой проги:
Public Sub LoadBinaryFile(ByVal lbfFileName As String) 'on error resume next Dim i As Long Dim fs As Long Dim s As String Dim b As Byte Dim sb As String Dim memB As String Dim nfn As Integer
Ты повторяешь то, от чего надо отойти: побайтовое чтение. Это самый главный тормоз в зтом деле. Дело в том, что устройства хранения информации выдают за одно обращение минимум один сектор. Размер сектора минимум 512 байт. А в строку прочитаются все символы.
To balamut:
Можно попробовать так:
1. Сформировать строку размером равным размеру файла.
2. Прочитать файл целиком в эту строку.
3. Передать строку в байтовый массив.
4. Читать из массива.
По п.1 пока идей никаких. Читать в строку файл при двоичном доступе легко. Передать строку в массив, причем очень быстро можно так: Arr = StrConv(Stroka, vbFromUnicode). Ну а работать с массивом в памяти работать будет быстро.
Re: Ты повторяешь то, от чего надо отойти: побайтовое чтение. Я многое поудалял Я считвал по байтам и одновременно записывал в другой файл hex-коды, а потом открывал созданный файл как текстовой через input. Все это безобразие по времени занимало 1 Мб = 5 сек - на Pentium 150 Mhz, а на Celeron 700 вобще все мгновенно происходит.
Re: 1. Сформировать строку размером равным размеру файла. Но нестоит забывать про ограничения по количеству символов, всего 65535, т.е. 64 Кб
Re: Передать строку в массив, причем очень быстро можно так: Arr = StrConv(Stroka, vbFromUnicode). И память не безгранична Так и повиснуть не долго, если файл большой.
Не знаю почему в строки фиксированной длины читает пустоту, но тут нашел в книге пример, как прочитать определенное колличество байт в строку:
'*******************************
strOutput$ = String(14," ")'по ходу для считывания в строку фиксированной длины
'сначала заполнить ее пробелами
Get #1, 26, strOutput$ 'считывает 14 байт в строку strOutput$, начиная с 26
'байта файла
'*******************************
Выводы: (скорее предположения )
1)Можно использовать строки фиксированной длины, но их сначала надо проинициализировать " " (пробелом, или еще чем-нибудь);
2)Если считываешь из большого файла (>64Кб), то надо считывать начиная с определенного байта файла, например, считал первые 64Кб в строку, сохранил
где-нибудь (можно в RitchTextBox), потом считываешь в строку начиная с 64Кб файла, и т.д. (Этот механизм лучше использовать для строк фиксированной длины, где-то читал, что максимальная скорость считывания достигается при 512 байтовом буфере, в данном случае это по ходу фиксированная строка длинной 512 байт).
Надеюсь, я не очень все запутал и это все поможет решить твою задачу, в любом случае отпиши получилось или нет
Ща уменя новая проблема, я делаю что то вроде Hex-редактора и все данные из файла выводятся в TextBox. При выводе значений в TextBox, надо их разделять друг от друга. Спомощью vbTab - слишком далеко, а спомщью "пробел пробел" - в следующих строках начинается разнобой, т.е. столбцы получаются неровные. Что можно сделать?
Знаешь, что я подумал, большие файлы то он у тя открывать будет, а вот очень большие нет, я тут набросал прогу, которая 25 метровый файл очень быстро открывает, т.е. не весь файл, а частично определенное количество байт считыает, потом еще и т.д., если нада могу скинуть
А вот насчет выравнивания текста, да в Си можно было бы printf() использовать