Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2007, 18:59   #1
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию (Это снова я) Как записать в файл?

Здравствуйте.
- Столкнулся с проблемой записи бинарных данных из реестра в файл
Использую код:
Код:
...
Var
s:byte;
...
Function WriteBinaryData(BinaryData:Widechar):Boolean;
var
f:tfilestream;
f1:textfile;
j:integer;
begin
Result:=false;
assignfile(f1,'PasswordBinary.txt');
if not fileexists('PasswordBinary.txt') then begin rewrite(f1);
closefile(f1);
end;
f:=tfilestream.Create('PasswordBinary.txt', fmOpenWrite);
f.Seek(0,soBeginning);
s:=byte(BinaryData);
j:=f.Write(s,15); // Длина заранее определена
if j=15 then Result:=true;
f.Free;
end;
...
Данные записываются не правильно, при чтении из реестра так же использовал тип "Widechar" и так же пробовал "Integer", "Byte", "Char" - запись происходит не верно.
- Может в Delphi 7 есть специальные функции для работы с бинарными выражениями?
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 02.05.2007, 11:04   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Что пытаетесь записать в файл, что записывается в файл?
При попытке работы не с Filestream , а просто с нетипизированными файлами проблема таже ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 02.05.2007, 12:24   #3
execom
Редкий тунеядец
Форумчанин
 
Аватар для execom
 
Регистрация: 29.10.2006
Сообщений: 595
По умолчанию

Я не знаю зачем весь этот сыр-бор, но помоему так проще:
Код:
Function WriteBinaryData(BinaryData:string; j:KolBait):Boolean;
VAR
  FCh : file of char;
    I : integer;
Begin
Result:=False;
AssignFile(FCh,'PasswordBinary.txt');
If Not FileExists('PasswordBinary.txt') Then ReWrite(FCh)
                                        Else Reset(FCh);
For I:=1 To j Do
Write(FCh,BinaryData[i]);
CloseFile(FCh);
If j=15 Then Result:=True;
End;
Код не запускал, поэтому допускаю мелкие недочеты...
execom вне форума Ответить с цитированием
Старый 02.05.2007, 13:47   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Все- таки ответьте на мои вопросы )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 03.05.2007, 11:31   #5
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
Все- таки ответьте на мои вопросы )
В файл заносятся 16-ричные и бинарные данные.
Использование (например) AssignFile не даст нужного результата.
Дело в том, что в реестре тип 'REG_BINARY' содержит массив чисел.
Теперь я использую массив для чтения и записи.
Код:
...
Var
s:byte;
...
Function WriteBinaryData(BinaryData:array of Widechar;p:integer):Boolean;
var
f:tfilestream;
f1:textfile;
j:integer;
begin
Result:=false;
assignfile(f1,'PasswordBinary.txt');
if not fileexists('PasswordBinary.txt') then begin rewrite(f1);
closefile(f1);
end;
f:=tfilestream.Create('PasswordBinary.txt', fmOpenWrite);
f.Seek(0,soEnd);
j:=f.Write(BinaryData,p); // Длина определяется программой
if j=p then Result:=true; // p - Размер данных
f.Free;
end;
...
Как бы странно это не казалось, f.Write(BinaryData,p); записывает массив так, как он выглядит в реестре.
Что касается расширения, - это просто так, для просмотра, оно может быть и .sys, потому что файл будет работать непосредственно с программой.

Я пологаю, спрашивать о том, как написать программу которая сама распространяется по локальной сети, не стоит?
Всё гениальное - просто!

Последний раз редактировалось zetrix; 03.05.2007 в 17:06.
Air вне форума Ответить с цитированием
Старый 03.05.2007, 20:36   #6
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

допустим у тебя есть 16 битное число

Код:
var
   n: dword;
   chislo: word;
    f: thandle;
begin
   f:=CreateFile('....',GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
  ......
  writefile(f,chislo,2,n,0);
так же с 32 битными числами
только
Код:
var chislo:dword;
writefile(f,chislo,4,n,0)
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как записать record в файл Kn793 Общие вопросы Delphi 5 01.08.2008 08:10
Как побайтно считать файл и записать в другой SeRhy Общие вопросы Delphi 2 09.06.2008 21:54
Заполнить массив и записать в файл Amery Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 27.05.2008 20:02
Как можно в файл (со своим расширением) записать любые файлы (например, звуковые)? andrey4623 Общие вопросы Delphi 3 12.01.2008 09:59
записать байт файл мандарин Общие вопросы Delphi 8 09.05.2007 20:45