Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевести файл в масив байтов 
V
    Опции темы
maestro2k
Дата 20.4.2006, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 13.4.2006

Репутация: нет
Всего: нет



У меня есть такой пример. Oн создает xxx.dll из масива, но мне нужно в этот масив вставить свой файл. Я не знаю как его перевести в байты (...77,90,80,0...).

Код

var
xDLLdpr:array[0..58367] of Byte = (77,90,80,0,2,0,0,0,4,0,15,0,255,255,0,0,184,0,0,0,0,0,0,0,64,0,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,186,16,0,14,31,180,9,205,33,184,1,76,205,33,144,144,84,104,105,115,32,112,114,111,103,114,97,109,32,109,117,115,116,32,98,101,32,114,117,110,32,117,110,100,101,114,32,87,105,110,51,50,13,10,36,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...
 . . .

  if OpenFile(PChar('C:\xxx.dll'),FStr,OF_EXIST)=HFILE_ERROR then
  begin
    assignfile(f,PChar('C:\xxx.dll'));
    rewrite(f);
    for i:=0 to sizeof(xDLL)-1 do
      Write(f,chr(xDLL[i]));
    closefile(f);
  end;
 

Это сообщение отредактировал(а) maestro2k - 20.4.2006, 20:18
PM MAIL   Вверх
allx
Дата 20.4.2006, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 1.9.2005

Репутация: нет
Всего: нет



maestro2k

Какойто непонятный вопрос ежели честно.  

Я так понял вопрос заклюбчается в " Как считать файл в массив байт". Если так то это можно сделать: 
1) используя TFileStream, TMemoryStream
2) используя динамический массив
3) используя статический массив заведомо большего, чем файл, размера
Все эти приемы есть в DRKB и в этом форуме обсуждалось не раз. 
PM MAIL   Вверх
Демо
Дата 20.4.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Код

var
  FS: TFileStream;
begin
  FS := TFileStream.Create('C:\xxx.dll', fm_Create);
  try
    FS.Write(FS,58367);
  finally
    FS.Free;
  end;
end;

 


--------------------
    
PM MAIL ICQ Skype   Вверх
x77
Дата 20.4.2006, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



Демо, что делает это код, FS.Write (FS, 58367)?

Код

var
  f: file;
begin
  AssignFile (f, '....');
  Rewrite (f);
  BlockWrite (f, xDLLdpr [0], 58367);
  CloseFile (f);


только напршивается вопрос smile xDLLdpr - это реальная длл-ка, "зашитая" побайтово в массив? которую требуется периодически сохранить на диск, чтобы заюзать её функции? smile 


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
maestro2k
Дата 20.4.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 13.4.2006

Репутация: нет
Всего: нет



Да это реальная дллка, но я так и не понял...  Мне нужно вставить в свой прэкт масив побайтово файла который будет создаватся. Как получить эго? 
PM MAIL   Вверх
Rouse_
Дата 21.4.2006, 03:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 5
Всего: 29



Маэстро, вы меня поражаете во второй раз. Зачем Вам это если Вы только учитесь?
Ок, разьясню, но сначала анекдот:
- Как обьяснить что такое бит?
- Бит - это байт деленный на восемь
- Как обьяснить что такое байт?
- Обьяснить что такое бит восемь раз.
- Обьяснение килобайта бесполезно ибо обьяснять долго, и памяти у реципиента не хватит...

Итак: данные, как это ни странно, храняться в виде битов умноженных на восемь. Обычно валяются в виде файла к которому нужно получить доступ и прочитать их. Некоторые способы открытия файла Вам уже были приведены вышеговорившими участниками.
Успешное открытие файла не даст ровным счетом ничего за исключением указателя на начало самого файла (если опустить системные вещи). После того как Вы имеете на руках указатель, можно их оттуда читать в выделенный буффер, а вот этот самый буффер и будет являться побайтовым отображением физического файла ибо образ smile
Ну и если включить телепатию по полной(с учетом что битовый образ файла умноженный на восемь у Вас не получается), то так кошерно ресурсы, кроме вас, еще никто не называл smile 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Демо
Дата 21.4.2006, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(x77 @  20.4.2006,  21:33 Найти цитируемый пост)
 что делает это код, FS.Write (FS, 58367)?


Ошибочка вышла-)

Код

FS.Write(xDLLdpr[0],58367);
 


--------------------
    
PM MAIL ICQ Skype   Вверх
maestro2k
Дата 21.4.2006, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 13.4.2006

Репутация: нет
Всего: нет



Rouse_  ЭТО ФОРУМ и если здесь задают вопрос - то значит в этом есть потребность. Rouse_  ну ты дал, если ты не понял вопрос так и скажи, а что такое байт я и так без тебя знаю.
Всё тема закрыта, я уже и сам разобрался.  

Это сообщение отредактировал(а) maestro2k - 21.4.2006, 20:15
PM MAIL   Вверх
RinOSpro
Дата 13.9.2007, 15:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ДА я отвечу наверно с опозданием всетаки топик давно писался.

maestro2k  наверно прочитал вот этот пример но сам ее смысл не понял

Код

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Интегрирование в EXE-шник других файлов

Процедура из указанного файла (FileName) создаёт unit в котором объявлен,
заполненный побайтово, массив и процедура сохранения этого массива обратно
в файл. Таким образом можно включить в один EXE-шник множество других
файлов (dll, ocx, dbf и т.п.) - прикрепить их как unit-ы. Фактически,
после сжатия EXE-шника программами типа UPX, получаем довольно компактный
файл, который можно использовать в качестве дистрибутива, например.

Зависимости: SysUtils, System
Автор:       Delirium
Copyright:   Delirium (Master BRAIN)
Дата:        22 мая 2002 г.
***************************************************** }

procedure FileToPas(FileName: string);
var
  BF: file of Byte;
  F: TextFile;
  P, N, S: string;
  BFSize: integer;
  BBB: Byte;
begin
  AssignFile(BF, FileName);
  Reset(BF);
  BFSize := FileSize(BF);
  P := ExtractFilePath(FileName);
  N := ExtractFileName(FileName);
  N := ChangeFileExt(N, '.PAS');
  AssignFile(F, N);
  ReWrite(F);
  Writeln(F, '(* Generated by Master BRAIN (C) 2002 *)');
  Writeln(F, 'unit ' + ChangeFileExt(N, '') + ';');
  Writeln(F);
  Writeln(F, 'interface');
  Writeln(F);
  Writeln(F, 'const FileSize:integer=' + IntToStr(BFSize) + ';');
  Writeln(F, 'FileData:array[0..' + IntToStr(BFSize - 1) + '] of Byte=');
  Writeln(F, '(');
  while not Eof(BF) do
  begin
    S := '';
    while (not Eof(BF)) and (Length(S) < 80) do
    begin
      Read(BF, BBB);
      S := S + IntToStr(BBB) + ',';
    end;
    if Eof(BF) then
      Delete(S, Length(S), 1);
    Writeln(F, S);
  end;
  CloseFile(BF);
  Writeln(F, ');');
  Writeln(F);
  Writeln(F, 'procedure SaveToFile(FileName:String);');
  Writeln(F);
  Writeln(F, 'implementation');
  Writeln(F);
  Writeln(F, 'procedure SaveToFile(FileName:String);');
  Writeln(F, 'var F:File of Byte;');
  Writeln(F, ' i:integer;');
  Writeln(F, 'begin');
  Writeln(F, 'AssignFile(F,FileName);');
  Writeln(F, 'ReWrite(F);');
  Writeln(F, 'for i:=0 to FileSize-1 do Write(F,FileData[i]);');
  Writeln(F, 'CloseFile(F);');
  Writeln(F, 'end;');
  Writeln(F);
  Writeln(F, 'end.');
  CloseFile(F);
end;



Это сообщение отредактировал(а) RinOSpro - 13.9.2007, 15:37
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0895 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.