Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
1-8029
dim-
2002-09-22 03:46
2002.10.03
Редактор форм


6-8087
skeeper
2002-08-02 13:48
2002.10.03
Заполнение формы


1-7991
Metotrone
2002-09-21 00:35
2002.10.03
Закрытие программы


1-8026
XPatriot
2002-09-20 20:38
2002.10.03
PopUpMenu


1-8055
Vdovin-AV@yandex.ru
2002-09-20 13:51
2002.10.03
Дабл Клик в Memo





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский