Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3

Работа с двоичными файлами

12.03.2014, 18:42. Показов 1061. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!!! Ребята подскажите по такому вопросу. Есть код который я набрал из учебника вот он:

C++
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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int iNom;
String Rez_f = "Rezylt_f"; // Ôàéë ñ äàííûìè
iNom = FileCreate(Rez_f);//Ñîçäà¸ì ôàéë Rez_f
 
 if(iNom==-1)
   {
    ShowMessage("Ôàéë íå óäàëîñü ñîçäàòü");
   }
//Îáúÿâëÿåì ïåðåìåííóþ Sx_1 è çàïèñûâàåì â íå¸ äàííûå
String Sx_1 = "Çàïèñü â ôàéë";
//Êîïèðóåì äàííûå èç ïåðåìåííîé Sx_1 è çàïèñûâàåì â íå¸ äàííûå
FileWrite(iNom,&Sx_1,sizeof(Sx_1));
//Çàêðûâàåì ôàéë Rez_f ñ íîìåðîì iNom
FileClose(iNom);
String Sx_2;//Îáúÿâëÿåì åù¸ îäíó ïåðåìåííóþ
//Îòêðûâàåì ôàéë Rez_z â ðåæèìå òîëüêî ÷òåíèÿ
iNom = FileOpen(Rez_f,fmOpenRead);
//Êîïèðóåì èç ôàéëà Rez_f äàííûå â ïåðåìåííóþ Sx_2
FileRead(iNom,&Sx_2,sizeof(Sx_2));
ShowMessage(Sx_2);
//Âûâîäèì ñîäåðæèìîå ïåðåìåííîé Sx_2 â òåêñòîâîì âèäå
FileClose(iNom);
 
}
//---------------------------------------------------------------------------
Когда нажимаю 1 раз кнопку код работает отлично, потом я нажимаю второй раз на эту кнопку и вылетает ошибка такого плана (см.скриншот внизу). Как бороться с этой ошибкой? Заранее благодарен за ответ
Миниатюры
Работа с двоичными файлами  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.03.2014, 18:42
Ответы с готовыми решениями:

Работа с двоичными файлами
Всем привет.. пытаюсь понять один вопрос. допустим есть текстовый файл с таким содержанием я хочу эту информацию переписать в...

Работа с двоичными файлами
Создать файл,состоящий из n вещественных чисел. Вывести на экран все числа данного файла не попадающие в данный диапазон!!!

Работа с двоичными файлами
Работа с двоичными файлами: Создать файл и записать в него степени числа 3. Вывести на экран все компоненты файла с четным порядковым...

6
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
12.03.2014, 18:59
На 21 строчке ошибка, полагаю? String - не просто массив, это класс, хранящий внутри указатель на текст, размещенный в динамически выделяемой памяти. Писать в переменную Sx_2 таким образом нельзя. Следует создать буфер - простой массив char или wchar_t и писать в него.

Добавлено через 49 секунд
И что это за учебник, кстати?
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.03.2014, 19:03  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
И что это за учебник, кстати?
Федоренко Ю.П "Алгоритмы и программы на С++ Builder" г. Москва, 2010 г.

Добавлено через 2 минуты
Цитата Сообщение от BRcr Посмотреть сообщение
На 21 строчке ошибка, полагаю? String - не просто массив, это класс, хранящий внутри указатель на текст, размещенный в динамически выделяемой памяти. Писать в переменную Sx_2 таким образом нельзя. Следует создать буфер - простой массив char или wchar_t и писать в него.
Я так и думал. Просто решил переспросить. В книгах тоже встречаются опечатки
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
12.03.2014, 19:14
Да уж... классные очепятки. Человеку без интернета они свернули бы немало крови.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.03.2014, 19:30  [ТС]
Дело в том что при таком переделанном коде

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int iNom;
String Rez_f = "Rezylt_f"; // Ôàéë ñ äàííûìè
iNom = FileCreate(Rez_f);//Ñîçäà¸ì ôàéë Rez_f
 
 if(iNom==-1)
   {
    ShowMessage("Ôàéë íå óäàëîñü ñîçäàòü");
    }
//Îáúÿâëÿåì ïåðåìåííóþ Sx_1 è çàïèñûâàåì â íå¸ äàííûå
char* Sx_1 = "Çàïèñü â ôàéë";
//Êîïèðóåì äàííûå èç ïåðåìåííîé Sx_1 è çàïèñûâàåì â íå¸ äàííûå
FileWrite(iNom,Sx_1,sizeof(Sx_1));
//Çàêðûâàåì ôàéë Rez_f ñ íîìåðîì iNom
FileClose(iNom);
Оно в файл записывает только 4 первых буквы и всё, а остальное не хочет
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
13.03.2014, 07:13
Цитата Сообщение от Sasha Посмотреть сообщение
sizeof(Sx_1)
Эта команда вернет размер указателя на char, а не массива, на начало которого он указывает. Тут либо использовать обычный массив + sizeof, либо любой вид массива и знать при этом его размер. В случае со строками, завершенными нулем, можно, например, еще использовать strlen()...
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
20.03.2014, 12:29  [ТС]
Вот так заработало
C++
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
32
33
34
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int iNom;
String Rez_f = "Rezylt_f"; // Ôàéë ñ äàííûìè
iNom = FileCreate(Rez_f);//Ñîçäà¸ì ôàéë Rez_f
 
 if(iNom==-1)
   {
    ShowMessage("Ôàéë íå óäàëîñü ñîçäàòü");
    //Abort();
    }
//Îáúÿâëÿåì ïåðåìåííóþ Sx_1 è çàïèñûâàåì â íå¸ äàííûå
 String Sx_1 = "Çàïèñü â ôàéë";
 
//Êîïèðóåì äàííûå èç ïåðåìåííîé Sx_1 è çàïèñûâàåì â íå¸ äàííûå
 
 FileWrite(iNom, Sx_1.c_str(), Sx_1.Length());
//Çàêðûâàåì ôàéë Rez_f ñ íîìåðîì iNom
 FileClose(iNom);
 
//Îòêðûâàåì ôàéë Rez_z â ðåæèìå òîëüêî ÷òåíèÿ
   iNom = FileOpen(Rez_f,fmOpenRead);
   int FileLength = FileSeek(iNom, 0, 2); // îïðåäåëÿåì äëèíó ôàéëà
   FileSeek(iNom,0,0); // ïåðåõîäèì íà íà÷àëî ôàéëà
   char* Sx_2 = new char[FileLength+1];//Îáúÿâëÿåì åù¸ îäíó ïåðåìåííóþ
   FileRead(iNom, Sx_2, FileLength); // ÷èòàåì
   Sx_2[FileLength] = '\0'; // â êîíåö äîáàâëÿåì \0
   ShowMessage(AnsiString(Sx_2));
   FileClose(iNom);
   delete [] Sx_2;
   Sx_2 = NULL;
 
}
//---------------------------------------------------------------------------
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.03.2014, 12:29
Помогаю со студенческими работами здесь

Работа с двоичными файлами
У меня есть кусок программы, который мне нужно переписать: #include <iostream> #include <conio.h> #include <cstdlib> ...

Работа с двоичными файлами
Необходимо реализовать функцию чтения и записи небольших файлов в оперативную память (стек программы). Правильно ли я понимаю, что...

Работа с двоичными файлами
Всем добрый вечер!) По заданию требуется написать 2 программы (для открытия и чтения двоичного файла) для записи последовательности из n...

Работа с двоичными файлами
Создать файл, состоящий из n вещественных чисел. Вывести на экран все числа данного файла с четными порядковыми номерами, меньшие заданного...

Работа с двоичными файлами и командной строкой
Помогите, пожалуйста! Не нашла похожей задачи здесь, поэтому создаю новую тему. Нужно готовое решение, сроки горят. Учусь не на...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru