Форум: "Основная";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
ВнизКак открыть файл в шестнадцатиричном виде? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c