Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.03;
Скачать: CL | DM;

Вниз

Как открыть файл в шестнадцатиричном виде?   Найти похожие ветки 

 
Lego ©   (2002-09-18 00:08) [0]

Может мне и ненужно именно в шестнадцатиричном, но мне так проще с ним работать...
Попытаюсь расказать что именно мне нужно, может неприйдется так извращатся тогда...
Значит у меня есть файл на 32кб мне нужно записывать(не все время а при необходимости) допустим по этим адресам:
1234h значение FF
1235h значение FF
1236h значение FF
Сразу скажу файл свободен для модификации, атрибуты R\W, вобщем все просто какбы но неимел я дел раньше с файлами поэтому не все просто для меня... и еще файл не текстовый.
Я бы мог и в любом HEX-редакторе менять что мне нужно... но это я, а кроме меня программой еще будет пользоватся несколько человек.
Если что непонятно расказал, то sorry :)... исправлюсь :)
Заранее спасибо.


 
Юрий Зотов ©   (2002-09-18 00:40) [1]

Открываете, как file of byte, затем Seek и Write. Примеры есть в справке. Никакие "шестнадцатиричности" здесь ни при чем.


 
Lego ©   (2002-09-18 02:34) [2]

Спасибо буду смотерть...


 
Стоит   (2002-09-18 03:24) [3]

только добавить, что вместо Seek следует употреблять (что бы не было вопросов и проблем) FileSeek.


 
Lego ©   (2002-09-19 00:11) [4]

Что-то у меня вообще ничего неполучается с этим :(
Попробую еще посмотреть FileSeek...
Если всетаки нетрудно то подкиньте пример как это сделать plz.


 
Юрий Зотов ©   (2002-09-19 01:03) [5]

const
FileName = "MyFile.num";
FileOffset = 64;

var
F: file of byte;
NewByte: byte = $FF;

procedure TForm1.FormCreate(Sender: TObject);
// Пишем файл-пример
var
i: byte;
begin
AssignFile(F, FileName);
Rewrite(F);
for i := 0 to 255 do Write(F, i);
CloseFile(F)
end;

procedure TForm1.Button1Click(Sender: TObject);
// Меняем 64-й байт на $FF
begin
with TFileStream.Create(FileName, fmOpenReadWrite or fmShareDenyWrite) do
try
Seek(FileOffset, soFromBeginning);
Write(NewByte, 1)
finally
Free
end
end;


 
Юрий Зотов ©   (2002-09-19 10:41) [6]

> вот еще один пример различной работы с файлами.

Специально. Чтобы именно различные методы и показать.

> непонятно зачем, как, и почему была такая категоричность

Категоричность была по поводу "шестнадцатиричности". И правильно.

> "Открываете, как file of byte" использовано лишь для "// Пишем файл-пример".

1. Неверно. FileStream неявно делает фактически то же самое, только иными механизмами. Уж во всяком случае, не как текст. Об этом и шла речь.

2. Написать "чистый" пример с file of byte? Как Вы понимаете, это займет где-то пару минут. Но хотелось именно показать разные методы.


 
Lego ©   (2002-09-20 03:38) [7]

Собственно говоря все работает... но... грабли :(
Вкратце раскажу для чего мне это...
Использую EmptyTable (это я про базу парадокс) после чего все данные сносятся и таблица полностью чистая кроме autoinc поля в котором остается старая инфа о следующем номере записи, ну так вот я и решил сам подправлять этот номерок :)
Значит ReWriteTable работает на все 100% если не из моей программы делать ->

// Table1 это TwwTable

procedure TForm1.ReWriteTable;
var
FileName: TFileName;
NewByte: byte;
begin
FileName := "db\test.db";
// и так пробовал что ниже
// FileName := ExtractFilePath(ParamStr(0)) + "db\test.db";
// FileName := ExtractFilePath(ParamStr(0)) + "\db\test.db";
NewByte := $00;
with TFileStream.Create(FileName, fmOpenReadWrite or fmShareDenyWrite) do
try
Seek(73, 0);
Write(NewByte, 1);
Seek(74, 0);
Write(NewByte, 1);
Seek(75, 0);
Write(NewByte, 1);
Seek(76, 0);
Write(NewByte, 1);
finally
Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Active := False;
Table1.Close;
Table1.EmptyTable;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ReWriteTable;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Table1.Open;
Table1.Active := True;
end;

Это я так для ясности расписал на отдельные кнопки чтобы отследить где проблема.
Я заметил что этот пример неможет работать с тем что было до него открыто... глупость но я незнаю как объяснить, вобщем матерится на то что неможет открыть файл хотя файл никем и ничем в теории неиспользуется(думаю простого удаления достаточно чтобы это проверить)... просто можно выковыривать всю таблицу из ресурсов и кидать в папку но зачем если проще пару байт переписать...

Result := "Help!" :)


 
Lego ©   (2002-09-20 07:52) [8]

Какая разница чему равен или неравен файл? Я ведь его закрываю а потом переписываю пару байт после чего снова открываю... и это неважно таблица базы или просто какойто файл... мне так кажется... поправте если ошибаюсь... а лучше помогите разобратся :)


 
Lego ©   (2002-09-21 09:42) [9]

Мда... порезали форум :) тут перед Lego © (20.09.02 07:52) было еще одно сообщение :)
Вобщем сегодня я снова проверил и все что выше написано заработало... ужасно нелюблю такие вещи которые сами по себе начинают работать...
Надеюсь все будет нормально...
Спасибо Юрий Зотов что помогли :)


 
Юрий Зотов ©   (2002-09-21 09:53) [10]

Seek(73, 0);
Write(NewByte, 1);
Seek(74, 0);
Write(NewByte, 1);
Seek(75, 0);
Write(NewByte, 1);
Seek(76, 0);
Write(NewByte, 1);

А почему не разом?

var
NewBytes: DWORD = $FFFFFFFF;

Seek(73, soFromBeginning);
Write(NewBytes, SizeOf(NewBytes));


 
Lego ©   (2002-09-22 00:06) [11]

И то точно :)
Еще раз спасибо :)



Страницы: 1 вся ветка

Текущий архив: 2002.10.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
1-7914
kalliopiy
2002-09-23 17:30
2002.10.03
Вопрос по разного рода Grid ам


1-8065
Metotrone
2002-09-22 18:48
2002.10.03
Дескриптор


1-8029
dim-
2002-09-22 03:46
2002.10.03
Редактор форм


1-7934
siliks330
2002-09-19 16:38
2002.10.03
Как можно изменить регион ЧУЖОГО окна?


3-7807
ОлегТ
2002-09-11 21:42
2002.10.03
как програмно задать псевдоним и путь в BDE