![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как открыть файл в шестнадцатиричном виде? [D5, Win95/98, WinME]
Lego © (2002-09-18 00:08:00)Может мне и ненужно именно в шестнадцатиричном, но мне так проще с ним работать...
Попытаюсь расказать что именно мне нужно, может неприйдется так извращатся тогда...
Значит у меня есть файл на 32кб мне нужно записывать(не все время а при необходимости) допустим по этим адресам:
1234h значение FF
1235h значение FF
1236h значение FF
Сразу скажу файл свободен для модификации, атрибуты R\W, вобщем все просто какбы но неимел я дел раньше с файлами поэтому не все просто для меня... и еще файл не текстовый.
Я бы мог и в любом HEX-редакторе менять что мне нужно... но это я, а кроме меня программой еще будет пользоватся несколько человек.
Если что непонятно расказал, то sorry :)... исправлюсь :)
Заранее спасибо.
Lego (2002-09-22 00:06:00) [1]И то точно :)
Еще раз спасибо :)
Юрий Зотов (2002-09-21 09:53:00) [2]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-21 09:42:00) [3]Мда... порезали форум :) тут перед Lego © (20.09.02 07:52) было еще одно сообщение :)
Вобщем сегодня я снова проверил и все что выше написано заработало... ужасно нелюблю такие вещи которые сами по себе начинают работать...
Надеюсь все будет нормально...
Спасибо Юрий Зотов что помогли :)
Lego (2002-09-20 07:52:00) [4]Какая разница чему равен или неравен файл? Я ведь его закрываю а потом переписываю пару байт после чего снова открываю... и это неважно таблица базы или просто какойто файл... мне так кажется... поправте если ошибаюсь... а лучше помогите разобратся :)
Lego (2002-09-20 03:38:00) [5]Собственно говоря все работает... но... грабли :(
Вкратце раскажу для чего мне это...
Использую 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!" :)
Юрий Зотов (2002-09-19 10:41:00) [6]> вот еще один пример различной работы с файлами.
Специально. Чтобы именно различные методы и показать.
> непонятно зачем, как, и почему была такая категоричность
Категоричность была по поводу "шестнадцатиричности". И правильно.
> "Открываете, как file of byte" использовано лишь для "// Пишем файл-пример".
1. Неверно. FileStream неявно делает фактически то же самое, только иными механизмами. Уж во всяком случае, не как текст. Об этом и шла речь.
2. Написать "чистый" пример с file of byte? Как Вы понимаете, это займет где-то пару минут. Но хотелось именно показать разные методы.
Юрий Зотов (2002-09-19 01:03:00) [7]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;
Lego (2002-09-19 00:11:00) [8]Что-то у меня вообще ничего неполучается с этим :(
Попробую еще посмотреть FileSeek...
Если всетаки нетрудно то подкиньте пример как это сделать plz.
Стоит (2002-09-18 03:24:00) [9]только добавить, что вместо Seek следует употреблять (что бы не было вопросов и проблем) FileSeek.
Lego (2002-09-18 02:34:00) [10]Спасибо буду смотерть...
Юрий Зотов (2002-09-18 00:40:00) [11]Открываете, как file of byte, затем Seek и Write. Примеры есть в справке. Никакие "шестнадцатиричности" здесь ни при чем.