Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 172

Чтение и запись в бинарный файл

19.12.2020, 00:27. Показов 4660. Ответов 48
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую.
Нужна помощь кодом, есть бинарный файл размером 1кб
Мне нужно в Edit1 вывести содержимое из файла вида 8100B362
А в Edit2 например ввести новое значение 7534A514 и заменить 8100B362 в файле.

Пример:
Миниатюры
Чтение и запись в бинарный файл   Чтение и запись в бинарный файл  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.12.2020, 00:27
Ответы с готовыми решениями:

Чтение и запись в бинарный файл
Всем привет. Нужна помощь с решение задачи по программированию. Не могу разобраться как записать и считать назад структуру из бинарного...

Чтение и запись в бинарный файл
Мой код должен решать следующую задачу: Даны два файла f 1 и f 2. Файл f 1-это инвентарный файл, содержащий сведения о том, сколько...

Чтение и запись в бинарный файл
Записываю текст из Memo в бинарный файл, потом в другой программе пытаюсь считать текст из этого бинарного файла в Memo, но при считывании...

48
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
19.12.2020, 12:43
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Myrus Посмотреть сообщение
$12C
$12D
$12E
$12F
$130
$131
$132
$133
и что это по полтора байта такое? файл приведи уж лучше оригинальный
0
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 172
19.12.2020, 12:46  [ТС]
1.rar

bin файл не удалось прикрепить. Надо переименовать rar в bin
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
19.12.2020, 12:48
Цитата Сообщение от Myrus Посмотреть сообщение
Надо переименовать rar в bin
А просто заархивировать никто не догадался...
0
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 172
19.12.2020, 12:49  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
А просто заархивировать никто не догадался...
Это так принципиально ? Или просто съязвить нужно ?
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
19.12.2020, 13:02
Как-то так можно прочитать и записать:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TFileStream;
  dw: dword;
begin
  // Прочитать из файла байты и показать в Edit1
{  $12C, $12D, $12E, $12F, $130, $131, $132, $133{}
  fs := TFileStream.Create(ExtractFilePath(Application.ExeName) + '1.bin', fmOpenRead or fmShareDenyNone);
  fs.Seek($12C, 0);
  fs.Read(dw, 4);
  fs.Free;
 
  Edit1.Text := IntToHex(dw, 8);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  fs: TFileStream;
  dw: dword;
begin
  // Записать в файл байты из Edit2
  // А в Edit2 например ввести новое значение 7534A514 и заменить 8100B362 в файле.
{  $12C, $12D, $12E, $12F, $130, $131, $132, $133{}
  fs := TFileStream.Create(ExtractFilePath(Application.ExeName) + '1.bin', fmOpenReadWrite or fmShareDenyWrite);
  fs.Seek($12C, 0);
  dw := $8100B362;
  fs.Write(dw, 4);
  fs.Free;
 
  Edit2.Text := IntToHex(dw, 8);
end;
Добавлено через 1 минуту
Цитата Сообщение от Myrus Посмотреть сообщение
Или просто съязвить нужно ?
Ну конечно. Вы же издеваетесь над нами, вместо того, чтобы просто разархивировать нужно менять расширение.
0
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 172
19.12.2020, 13:08  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
Ну конечно. Вы же издеваетесь над нами, вместо того, чтобы просто разархивировать нужно менять расширение.
Я не специально Сразу не сообразил.

Может я не правильно дал адреса байтов ? Не те данные выдает.


Еще раз сделал скрин где находятся байты и какой результат надо вывести


Т.е. в Edit1 должно считаться 8100B361
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
19.12.2020, 13:17
Цитата Сообщение от Myrus Посмотреть сообщение
Не те данные выдает.
Скорее всего, не тот файл:
Миниатюры
Чтение и запись в бинарный файл  
0
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 172
19.12.2020, 13:20  [ТС]
Ой, наверно я не тот файл выложил, сорри. Перезалил
2.rar
0
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 172
19.12.2020, 13:24  [ТС]
0
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 172
19.12.2020, 14:10  [ТС]
Получается считывает только 4 байта и почему-то справа налево - 30 30 31 38, а не 38 31 30 30
И не считывает дальше 42 33 36 31

Добавлено через 35 минут
А вообще надо чтобы считывало в Edit1 8100B361
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
19.12.2020, 15:18
Лучший ответ Сообщение было отмечено Myrus как решение

Решение

Цитата Сообщение от Myrus Посмотреть сообщение
почему-то справа налево
Потому, что такой порядок байтов в файле.

Цитата Сообщение от Myrus Посмотреть сообщение
А вообще надо чтобы считывало в Edit1 8100B361
Аа, так тут в файле число записано в виде текста. Не сразу обратил внимание.
Тогда может и проще будет:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TFileStream;
  s: array[1..8] of char;
begin
  // Прочитать из файла байты и показать в Edit1
{  $12C, $12D, $12E, $12F, $130, $131, $132, $133{}
  fs := TFileStream.Create(ExtractFilePath(Application.ExeName) + '1 - копия.bin', fmOpenRead or fmShareDenyNone);
  fs.Seek($12C, 0);
  fs.Read(s, 8);
  fs.Free;
 
  Edit1.Text := s;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  fs: TFileStream;
  s: string;
begin
  // Записать в файл байты из Edit2
  // А в Edit2 например ввести новое значение 7534A514 и заменить 8100B362 в файле.
{  $12C, $12D, $12E, $12F, $130, $131, $132, $133{}
  s := Edit2.Text;
  while Length(s) < 8 do s := s + ' '; // сделать количество символов не меньше 8
 
  fs := TFileStream.Create(ExtractFilePath(Application.ExeName) + '1 - копия.bin', fmOpenReadWrite or fmShareDenyWrite);
  fs.Seek($12C, 0);
  fs.Write(s[1], 8);
  fs.Free;
end;
1
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 172
19.12.2020, 15:21  [ТС]
Попробовал считать, вот результат:
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,614
19.12.2020, 15:46
Версия Дельфи какая? Если 9+, то лучше Char заменить на Ansichar, а string на Ansistring.
1
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 172
19.12.2020, 15:47  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
Версия Дельфи какая? Если 9+, то лучше Char заменить на Ansichar, а string на Ansistring.
10.3
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,614
19.12.2020, 15:51
Лучший ответ Сообщение было отмечено Myrus как решение

Решение

Значит заменить как я сказал
1
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
19.12.2020, 16:22
Лучший ответ Сообщение было отмечено Myrus как решение

Решение

Вот не зря же при создании темы можно выбрать версию Delphi. Но многие не замечают это.

Добавлено через 1 минуту
Да, для юникодных версий нужно писать AnsiString и AnsiChar. В принципе, так можно писать и в 7 дельфи. Надо было мне так сразу написать, учитывая, что идёт работа с "чужим" файлом.
0
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 172
19.12.2020, 17:40  [ТС]
Ой забыл спросить последнее.
А как сделать все тоже самое только значения отображать в шестнадцатеричной системе, т.е. вместо 8100B361 отобразить 3831303042333631, а когда записывать новое значение то вместо 7534A514 вводить 3735333441353134
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,614
19.12.2020, 17:59
Delphi
1
2
3
4
5
6
7
8
var
  S, S1 : Ansistring;
  i : Integer;
...
  S:='8100B361';
  S1:='';
  for i:=1 to Length(S) do
    S1:=S1+IntToHex(Ord(S[i]),2);
1
5 / 5 / 1
Регистрация: 09.12.2020
Сообщений: 194
19.12.2020, 18:52
Криво работает ? Странно ...
У меня почему-то все четко читает и пишет

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
s: AnsiString;
f: file;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
s:='22222222'; // Init 8 symbols
AssignFile (f, '1.bin');
Reset (f, 1);
Seek (f, $12c);
BlockRead (f, s[1], 8); //Read
Edit1.Text:= s; //s:=8100B361
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
s:=Edit2.Text; //s:='7534A514';//
Seek (f, $12c);
BlockWrite (f, s[1], 8); // Write
CloseFile (f);
end;
 
end.
Миниатюры
Чтение и запись в бинарный файл  
1
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 172
19.12.2020, 19:01  [ТС]
Все работает, но без предварительной загрузки, сохранить новые значения нельзя. Поправимо, но факт )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.12.2020, 19:01

Чтение и запись в бинарный файл
Ребят nомогите мне nожалуйста. Я хочу nрочитать бинарный файл , в котором заnисаны данные в виде структуры, глянул в инете как читают и...

Чтение и запись в бинарный файл
Добрый день! Помогите разобраться. Надо записать информацию в бинарник, а потом прочесть из него и вывести на экран. Вроде все делаю...

Запись/чтение бинарный файл
Подскажите, пожалуйста, где можно посмотреть оптимальный пример о записи и чтении списка объектов класса в бинарный файл? Да что там...

Чтение и запись информации в бинарный файл
Мне необходимо выполнить задание: Тема: &quot;Бинарные файлы. Файл из структур&quot; Для каждого из вариантов задания необходимо...

Чтение/Запись в текстовый и бинарный файл.
Подскажите в чем ошибка. Функции чтения и записи в бинарный и текстовый файл толком не работают( Вот программа: HEADER.H ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru