Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.79
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
#1

Редактирование бинарного файла - C++

30.03.2012, 04:46. Просмотров 4431. Ответов 16
Метки нет (Все метки)

возможно ли написать такую функцию которая будет редактировать бинарный файл?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2012, 04:46
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Редактирование бинарного файла (C++):

Редактирование бинарного файла
Суть программы - создаёт бинарный файл и записывает в него строки с количеством...

Редактирование записи бинарного файла
Здравствуйте. Подскажите пожалуйста, мне надо призвести редактирование записи в...

Сортировка\редактирование\удаление бинарного файла
Люди помогите пожалуйста... В бинарном файле у меня находятся сведения о...

Создание бинарного дерева из бинарного файла
struct Bin { string name; string city; int players; int score; };...

Создание бинарного дерево из бинарного файла
struct Bin { string name; string city; int players; int...

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется
Формат файла состоит из 3 структур и одной переменной. Подробное описание...

16
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
30.03.2012, 05:25 #2
Можно, вопрос в том что записано в файле?
0
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
30.03.2012, 20:54  [ТС] #3
Цитата Сообщение от Avazart Посмотреть сообщение
Можно, вопрос в том что записано в файле?
пример одного из файлов
Первый файл содержит информацию о товарах:
• Идентификатор (уникальный номер) товара;
• Название;
• Цена;
• Количество в наличии.
0
Nekto
342 / 287 / 37
Регистрация: 23.03.2012
Сообщений: 838
30.03.2012, 21:02 #4
типизированный файл?
0
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
30.03.2012, 21:04 #5
Ну составить структуру "товар" и записывать в бинарном виде в файл для перехода по товарам можно использовать seekg(), seekp()
0
dimcoder
Полярный
467 / 440 / 157
Регистрация: 11.09.2011
Сообщений: 1,142
30.03.2012, 21:08 #6
Цитата Сообщение от crewww Посмотреть сообщение
возможно ли написать такую функцию которая будет редактировать бинарный файл?
Да.

Для редактирования нужно открыть файл так:
C++
1
2
3
ofstream fout("c:\\f.txt", ios::in | ios::out);           //Open
fout.seekp(sizeof(StuctureName) * numOfRecord);         //Поставить указатель на место где нужно редактировать
fout.write(reinterpret_cast<const char *>(&structureObject), sizeof(structureName));        //Записать
1
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
30.03.2012, 21:26 #7
Желательно fstream fout("c:\\f.txt", ios::in | ios::out | ios::binary);
1
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
31.03.2012, 03:45  [ТС] #8
Цитата Сообщение от Nekto Посмотреть сообщение
типизированный файл?
да именно типизированный

Добавлено через 3 минуты
Цитата Сообщение от dimcoder Посмотреть сообщение
Да.

Для редактирования нужно открыть файл так:
C++
1
2
3
ofstream fout("c:\\f.txt", ios::in | ios::out);           //Open
fout.seekp(sizeof(StuctureName) * numOfRecord);         //Поставить указатель на место где нужно редактировать
fout.write(reinterpret_cast<const char *>(&structureObject), sizeof(structureName));        //Записать
как будет определяться numOfRecord?

Добавлено через 23 минуты
чтобы оформить функцию мне нужно на входе получать файл
то есть заголовок функции такой будет?
C++
1
void correct (ifstream &f)
0
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
31.03.2012, 04:53 #9
Думаю так
C++
1
2
3
4
5
6
7
8
9
10
11
bool correct (std::string filename,StuctureName structureObject,int numOfRecord)
{
fstream fout(filename.c_str(), ios::out|ios::binary);   
if(fout) 
 {      
 fout.seekp(sizeof(StuctureName) * numOfRecord);        
 fout.write(reinterpret_cast<const char *>(&structureObject), sizeof(structureName));  
 return  true;    
 }
return false;
}
numOfRecord- номер записи
1
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
31.03.2012, 22:04  [ТС] #10
как будет определяться numOfRecord?
0
Nekto
342 / 287 / 37
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 22:23 #11
Цитата Сообщение от crewww Посмотреть сообщение
как будет определяться numOfRecord?
Ну ты ж редактируешь. Какой надо, такой и ставишь.
0
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
31.03.2012, 22:49  [ТС] #12
Цитата Сообщение от Nekto Посмотреть сообщение
Ну ты ж редактируешь. Какой надо, такой и ставишь.
я имел ввиду как вообще нумерация идет
скажем вот файле записана 1 структура там есть Идентификатор (уникальный номер) товара; Название; Цена; Количество в наличии.
она имеет номер 0? затем следующая уже имеет номер 1? или все таки с 1 идет нумерация?
0
Nekto
342 / 287 / 37
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 22:57 #13
Цитата Сообщение от crewww Посмотреть сообщение
я имел ввиду как вообще нумерация идет
скажем вот файле записана 1 структура там есть Идентификатор (уникальный номер) товара; Название; Цена; Количество в наличии.
она имеет номер 0? затем следующая уже имеет номер 1? или все таки с 1 идет нумерация?
с 0 начинается.
0
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
31.03.2012, 23:38 #14
И если меняешь, то менять надо всю структуру целиком со всеми полями.
0
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
01.04.2012, 11:30  [ТС] #15
Цитата Сообщение от Avazart Посмотреть сообщение
И если меняешь, то менять надо всю структуру целиком со всеми полями.
можете подробнее объяснить
и еще вопрос возник почему функция редактирования булевская а не void?
0
Nekto
342 / 287 / 37
Регистрация: 23.03.2012
Сообщений: 838
01.04.2012, 11:39 #16
Цитата Сообщение от crewww Посмотреть сообщение
можете подробнее объяснить
и еще вопрос возник почему функция редактирования булевская а не void?
В случае неудачи вернёт false. Если всё ок, вернёт true.
1
Avazart
Эксперт С++
7682 / 5591 / 543
Регистрация: 10.12.2010
Сообщений: 25,073
Записей в блоге: 17
01.04.2012, 13:45 #17
C++
1
if( ! correct (filename,structureObject,numOfRecord) ) cout<<"Ошибка открытия файла "<<filename<<endl;
Добавлено через 4 минуты
Есть еще нюанс с тем что надо заранее знать количество объектов структур записанных в файле что бы случайно numOfRecord не превысил её при редактировании.
1
01.04.2012, 13:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2012, 13:45
Привет! Вот еще темы с решениями:

Преобразование бинарного файла
Добрый день. Имеется файл, представляющий из себя сплошной текст из...

Чтение бинарного файла
Подскажите пожалуйста как можно правильно открыть бинарный файл не зная...

Обработка бинарного файла
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include...

Чтение из бинарного файла
Создала Базу данных. запись в файл происходит, а чтение из файла не получается....


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru