Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Alex_231
Зарегистрирован: 13.01.2005 Сообщения: 144 Откуда: Арсеньев
|
Добавлено: Пт Мар 17, 2006 11:41 am Заголовок сообщения: Размер загружаемого файла |
|
|
Axel, у меня к тебе чисто технический вопрос:
Как загрузить в память файл (ром) размером более 16 мегабайт, не используя статические массивы? |
|
Вернуться к началу |
|
|
Axel Советник
Зарегистрирован: 14.11.2003 Сообщения: 680
|
Добавлено: Пт Мар 17, 2006 7:43 pm Заголовок сообщения: |
|
|
... если я правильно понял вопрос, то в visual basic это будет так:
dim FileAsByteArray() as byte
open "file-name.rom" for binary as 1
redim FileAsByteArray(lof(1))
get #1,,FileAsByteArray()
close
' теперь в массиве FileAsByteArray() ВЕСЬ файл
romsize=ubound(FileAsByteArray) 'это размер файла в байтах
у VB нет (сильных) ограничений на размерность массива, поэтому этот кусок кода успешно будет работать для файлов меньше 2 Гигов...
...или вопрос был о том как ЭФФЕКТИВНО загрузить в память файл (ром) ? _________________ Всех их вместе переведём! |
|
Вернуться к началу |
|
|
Alex_231
Зарегистрирован: 13.01.2005 Сообщения: 144 Откуда: Арсеньев
|
Добавлено: Пн Мар 20, 2006 10:35 am Заголовок сообщения: |
|
|
Спасибо, ты меня правильно понял, но вся проблема в том, что я в Delphi работаю, а там в динамический массив (да и в статический тоже) не получается поместить более 1Mb данных. Поэтому мне пришлось создавать 32 массива и организовывать переход от одного к другому во время работы, а так довольно объемный код получается.
|
|
Вернуться к началу |
|
|
wl
Зарегистрирован: 20.12.2005 Сообщения: 76 Откуда: Россия
|
Добавлено: Пн Мар 20, 2006 11:13 am Заголовок сообщения: |
|
|
что за сказки? нормально читаются большие файлы (по крайней мере удавалось прочитать 300 мегов) |
|
Вернуться к началу |
|
|
Alex_231
Зарегистрирован: 13.01.2005 Сообщения: 144 Откуда: Арсеньев
|
Добавлено: Пн Мар 20, 2006 11:15 am Заголовок сообщения: |
|
|
А ты пытался запихнуть этот файл в массив? |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Пн Мар 20, 2006 11:20 am Заголовок сообщения: |
|
|
Конечно.
Вот попробуй так:
Код: |
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
rom: array of byte;
end;
//-------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
di: TFileStream;
begin
try
di:= TFileStream.Create('Zelda64.rom', fmOpenRead);
SetLength(rom, di.Size);
di.Read(rom[0], di.Size);
di.Free;
except
ShowMessage('Error');
end;
end;
|
|
|
Вернуться к началу |
|
|
Alex_231
Зарегистрирован: 13.01.2005 Сообщения: 144 Откуда: Арсеньев
|
Добавлено: Пн Мар 20, 2006 11:24 am Заголовок сообщения: |
|
|
А можно сделать
rom: array of Char;
? |
|
Вернуться к началу |
|
|
wl
Зарегистрирован: 20.12.2005 Сообщения: 76 Откуда: Россия
|
Добавлено: Пн Мар 20, 2006 11:36 am Заголовок сообщения: |
|
|
кажется да, не помню только будут ли там проблемы с нулевыми символами. Какой вообще смысл читать ром? Хочешь что-то типа hex-редактора замутить? |
|
Вернуться к началу |
|
|
Alex_231
Зарегистрирован: 13.01.2005 Сообщения: 144 Откуда: Арсеньев
|
Добавлено: Пн Мар 20, 2006 11:40 am Заголовок сообщения: |
|
|
Нет, простая прога вынимающая текст по поинтерам.
А с нулевыми кодами проблем не будет (раз в статическом массиве нет) |
|
Вернуться к началу |
|
|
Axel Советник
Зарегистрирован: 14.11.2003 Сообщения: 680
|
Добавлено: Пн Мар 20, 2006 2:52 pm Заголовок сообщения: |
|
|
Alex_231 писал(а): | А можно сделать
rom: array of Char;
? |
нельзя (в VB строки в unicode), но ты можешь загрузить ROM
в строку...
dim myRom as string
open "file.rom" for binary as 1
myRom = space(lof(1))
get #1,,myRom
close
теперь в строковой переменной myRom весь твой ROM...
чтобы узнать что в этом роме лежит по адресу 56dec просто
выкусаваешь из этой строки подстроку...
!!! адресация с ЕДИНИЦЫ
s = mid(myRom,56,1) 'один СИМВОЛ !!! НЕ БАЙТ, а именно символ
для перевода символов в их коды пользуйся функцией ASC, скажем:
code = ASC(s) _________________ Всех их вместе переведём! |
|
Вернуться к началу |
|
|
Alex_231
Зарегистрирован: 13.01.2005 Сообщения: 144 Откуда: Арсеньев
|
Добавлено: Вт Мар 21, 2006 10:51 am Заголовок сообщения: |
|
|
Axel, не обижайся, но лекции по программированию в VB мне не нужны, а как перевести символ в код я знаю еще со школы. |
|
Вернуться к началу |
|
|
Axel Советник
Зарегистрирован: 14.11.2003 Сообщения: 680
|
Добавлено: Вт Мар 21, 2006 11:14 am Заголовок сообщения: |
|
|
Alex_231 писал(а): | как перевести символ в код я знаю еще со школы. |
я просто хотел уточнить, что нельзя использовать функции типа cbyte _________________ Всех их вместе переведём! |
|
Вернуться к началу |
|
|
|