Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
#1

Флаги при работе с бинарными файлами - C++

02.08.2012, 15:50. Просмотров 2256. Ответов 45
Метки нет (Все метки)

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

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

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

Создание файла
C
1
2
3
4
5
fstream FileStreet ( L"Streets.dat",ios::binary  );
    if ( !FileStreet ) 
    {
        ErrorAddClient(L"Невозможно открыть файл\"Streets.dat\"!");
    }
Запись в файл

C
1
2
3
4
5
ofstream FileStreet (L"Streets.dat", ios::ate  );
    if ( !FileStreet ) 
        ErrorAddClient(L"Невозможно открыть файл\"Streets.dat\"!");
    FileStreet.write (reinterpret_cast<const char *>( &street ),sizeof( EditorStreet ) );
        InformationAboutEvent(L"Улица добавлена");
И периодично я в программе открываю файл для чтения

C
1
2
3
4
5
6
ifstream FileStreet ( L"Streets.dat", ios::binary | ios::in);
    if(!FileStreet)
    {
        ErrorAddClient(L"Невозможно открыть файл \"Streets.dat\"");
        return;
    }
Заранее спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2012, 15:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Флаги при работе с бинарными файлами (C++):

Информация по работе с бинарными файлами - C++
У меня возникла проблема при работе с бинарными файлами, вернее нет инфо чтоб почитать, да и хелп скуден, вышлите по мылу или скиньте сюда...

Работа с бинарными файлами: какой способ работает наиболее быстро при записи и считывании? - C++
Всем привет прошу помощи по этой теме. Попробую изложить кратко: 1) Есть не бинарный файл -&gt; Считываю его ifstream -&gt; работаю с данными...

Ошибка при работе с файлами - C++
Всем привет! Подккажите, плиз, что у меня неправильно в коде: #include &lt;cstdlib&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include...

Ошибка при работе с файлами - C++
Необходимо, создать текстовый файл со случайным именем в диапазоне 8 символов, латиница. Вот код: int main() { ...

Проблемы при работе с файлами - C++
доброго времени! возник у меня маленький трабл при работе с файлами. Причем совершенно не могу понять причину. Код такой: int...

Работа с бинарными файлами - C++
Создать текстовый файл с произвольным текстом. Разработать программу, которая выводит на экран по желанию пользователя: а) N первых строк...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 19:46  [ТС] #31
Ребята, спасибо всем!
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 19:51 #32
Так открывайте и будет вам счастье.
0
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 20:05  [ТС] #33
Спасибо еще раз, а то уже руки опустились. Пробуешь - пробуешь, а не получается. Спасибо
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 20:18 #34
Можно и так открывать:
C++
1
ofstream FileHome("NumberHomes.dat", ios::binary | ios::app);
Если файла нет, то будет создан и открыт для дозаписи в конец. Если есть, то данные не стираются, файл открывается для дозаписи в конец.
Единственно, что не забывайте, что если файл открыт для двух, каких-либо, операций (например для чтения и записи), то после окончания одной - файл нужно закрыть и потом открыть для другой. Иначе будут ошибки.
0
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 20:29  [ТС] #35
Цитата Сообщение от Avazart Посмотреть сообщение
clear() чистит поток от некритичных ошибок в том числе достижения конца файла, если есть ошибка то поток дальше не хочит работать для этого надо сбрасывать ошибки clear() а еще лучше локально осуществлять открытие
Откуда мне знать произошла ошибка внутри файла или нет? А что значит локальное открытие, имеется ввиду не глобальный поток, а внутри функций открывать?

Некритические ошибки, что это за ошибки? И еще, если достиг конец файла, то зачем мне чистить, я возьму и передвину указатели на нужный байт, это же бинарный файл.
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,666
Записей в блоге: 17
02.08.2012, 20:34 #36
Откуда мне знать произошла ошибка внутри файла или нет?
Проверять состояние потока.( его флаги )

http://www.cplusplus.com/reference/iostream/ios/ см good(),eof(),fail() итп

А что значит локальное открытие, имеется ввиду не глобальный поток, а внутри функций открывать?
Да
я возьму и передвину указатели на нужный байт, это же бинарный файл.
Достижение конеца файла тоже считается ошибкой
1
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 20:54  [ТС] #37
Цитата Сообщение от Avazart Посмотреть сообщение
Проверять состояние потока.( его флаги )

http://www.cplusplus.com/reference/iostream/ios/ см good(),eof(),fail() итп


Да

Достижение конеца файла тоже считается ошибкой
Проверять состояние потока.( его флаги )
А пример можно? Или на словах
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,666
Записей в блоге: 17
02.08.2012, 21:35 #38
http://www.cplusplus.com/reference/iostream/ios/clear/

Шилд "Самоучитель" стр 295
Павловская "Программирование ... " стр 278
0
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 21:40  [ТС] #39
Ребята, ерунда какая - то открываю файл для дозаписи, ранее создал файл, а теперь еще создается с таким же именем, что за чертовщина, и запись идет во вновь созданный

открываю вот так
Код
ofstream ClientFile ("ListOfPaket", ios::binary | ios::app  );
Ставлю флаг _Nocreate, все нормально, пробовал
ofstream ClientFile ("ListOfPaket", ios::app );
все равно создает
0
Миниатюры
Флаги при работе с бинарными файлами  
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 22:23 #40
Расширений не скрине не видно, а они, видимо, разные. Включите в системе расширения файлов, как вы без этого живёте?!

Добавлено через 4 минуты
ofstream ClientFile ("ListOfPaket", ios::binary | ios::app ); Расширение у имени файла где?
0
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 22:28  [ТС] #41
Виноват! Конец дня... Спасибо большое
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 22:35 #42
И вопрос, вдогонку: зачем вам бинарное чтение-запись, если код у вас с текстом работает?
0
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 22:41  [ТС] #43
Мне прийдется обнулять данные, в частности, у меня есть в файле название улицы, а на форме есть кнопка "Удалить", буду заходить в файл и обнулять данные. Как - то так... Да, Вы лучше меня, знаете удобство бинарных файлов.
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,666
Записей в блоге: 17
02.08.2012, 22:43 #44
Ну а какое тут удобство? Для этого не нужен бинарник...
Храните данные в памяти там же делайте операции, периодически сохраняйте в файл.
0
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 23:00  [ТС] #45
Вы правы, как - то не задумывался. Как Вы видите, я плохо разбираюсь с бинарными файлами, поэтому и хорошо что вожусь с ними. Спасибо.

Кстати, подскажите. Запись в файл string, создаю я переменную
Код
string str("");
, записываю в файл, а что писать
Код
FileStreet.write( reinterpret_cast<char *>( &str ), sizeof(str.size )
Код
 в sizeof (здесь)?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 23:00
Привет! Вот еще темы с ответами:

Работа с бинарными файлами - C++
Задача такова : нужно записать созданные объекты класса в бинарный фал а затем прочитать их же из файла и вывести на экран. Код написал,...

Задача с бинарными файлами - C++
Реализовать программу, работающую с бинарным файлом f1, который содержит массив строк различной длины. Строка должна быть описана...

Работа с бинарными файлами - C++
Создать бинарный файл с информацией о работниках предприятия: 1) фамилия 2) возраст 3) образование 4) должность 5) пол Вывести...

Работа с бинарными файлами - C++
Помогите решить проблему. Задача: создать файл записать в него 10 структур и закрыть, затем добавить еще 3, а после вывести их все на...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.08.2012, 23:00
Ответ Создать тему
Опции темы

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