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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
Holsteng
 Аватар для Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 15:50     Флаги при работе с бинарными файлами #1
Всем привет!
Ребята, не могу понять почему у меня удаляются данные из файла.

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

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

Создание файла
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;
    }
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2012, 15:50     Флаги при работе с бинарными файлами
Посмотрите здесь:

Проблемы при работе с файлами C++
C++ Работа с бинарными файлами
C++ Работа с Бинарными файлами
C++ Информация по работе с бинарными файлами
Ошибка при работе с файлами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 17:55     Флаги при работе с бинарными файлами #21
C++
1
wfstream FileStreet ("Streets.dat", ios::binary | ios::app);
Так попробуйте.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
02.08.2012, 17:55     Флаги при работе с бинарными файлами #22
C++
1
2
3
4
5
6
ofstream FileHome ("NumberHomes.dat",ios::binary | ios::app );
if(FileHome)
 {
 // DoSomething
 }
else cerr<"Error"<<endl;
Holsteng
 Аватар для Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 17:56  [ТС]     Флаги при работе с бинарными файлами #23
Цитата Сообщение от Avazart Посмотреть сообщение
Чаще при достижении конца файла
Каша в голове. То есть, если при чтении достигаю конца (допустим в цикле), то необходимо писать
C
1
2
3
FileHome.clear();
 
FileHome.close();
правильно ?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 17:56     Флаги при работе с бинарными файлами #24
C++
1
wofstream FileHome ( "NumberHomes.dat", ios::binary);
Так попробуйте.
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
02.08.2012, 17:58     Флаги при работе с бинарными файлами #25
clear() чистит поток от некритичных ошибок в том числе достижения конца файла, если есть ошибка то поток дальше не хочит работать для этого надо сбрасывать ошибки clear() а еще лучше локально осуществлять открытие
Holsteng
 Аватар для Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 18:05  [ТС]     Флаги при работе с бинарными файлами #26
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
wfstream FileStreet ("Streets.dat", ios::binary | ios::app);
Так попробуйте.
Это запись в файл?

Добавлено через 24 секунды
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
wofstream FileHome ( "NumberHomes.dat", ios::binary);
Так попробуйте.
Это создание файла?

Добавлено через 6 минут
Вообщем, без флага _Noreplace, как в случае wofstream так и в случае ofstream, удаляет данные из файла
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
02.08.2012, 18:06     Флаги при работе с бинарными файлами #27
ios::binary | ios::app не удаляет.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 18:13     Флаги при работе с бинарными файлами #28
Цитата Сообщение от Holsteng Посмотреть сообщение
Это создание файла?
Вы для чего открываете? Я же выше писал, что и как. _Noreplace уберите, и без него можно.

Добавлено через 1 минуту
Цитата Сообщение от Holsteng Посмотреть сообщение
wfstream FileStreet ("Streets.dat", ios::binary | ios::app);
Так попробуйте.
Это запись в файл?
Это для чтения и записи. Данные не удаляются. Файл должен быть.

Добавлено через 1 минуту
wofstream FileHome ( "NumberHomes.dat", ios::binary);
Так попробуйте.
Это создание файла?
Это создание и открытие для записи. Если файл с этим именем существует, данные стираются, если не существует - создаётся.
Holsteng
 Аватар для Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 18:24  [ТС]     Флаги при работе с бинарными файлами #29
Цитата Сообщение от alsav22 Посмотреть сообщение
Вы для чего открываете? Я же выше писал, что и как. _Noreplace уберите, и без него можно.

Добавлено через 1 минуту
Это для чтения и записи. Данные не удаляются. Файл должен быть.

Добавлено через 1 минуту
Это создание и открытие для записи. Если файл с этим именем существует, данные стираются, если не существует - создаётся.
Я вас понял. Как мне уберечься, если при запуске программы, стираются данные из файла. Поэтому я применяю _Noreplace в функции создания файла, дабы при вызове этой функции не стирались данные.

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

Некритические ошибки, что это за ошибки? И еще, если достиг конец файла, то зачем мне чистить, я возьму и передвину указатели на нужный байт, это же бинарный файл.
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
02.08.2012, 20:34     Флаги при работе с бинарными файлами #36
Откуда мне знать произошла ошибка внутри файла или нет?
Проверять состояние потока.( его флаги )

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

А что значит локальное открытие, имеется ввиду не глобальный поток, а внутри функций открывать?
Да
я возьму и передвину указатели на нужный байт, это же бинарный файл.
Достижение конеца файла тоже считается ошибкой
Holsteng
 Аватар для 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() итп


Да

Достижение конеца файла тоже считается ошибкой
Проверять состояние потока.( его флаги )
А пример можно? Или на словах
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
02.08.2012, 21:35     Флаги при работе с бинарными файлами #38
http://www.cplusplus.com/reference/iostream/ios/clear/

Шилд "Самоучитель" стр 295
Павловская "Программирование ... " стр 278
Holsteng
 Аватар для 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 );
все равно создает
Миниатюры
Флаги при работе с бинарными файлами  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 22:23     Флаги при работе с бинарными файлами
Еще ссылки по теме:

Задача с бинарными файлами C++
C++ Работа с бинарными файлами: какой способ работает наиболее быстро при записи и считывании?
Работа с бинарными файлами и структурами C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 22:23     Флаги при работе с бинарными файлами #40
Расширений не скрине не видно, а они, видимо, разные. Включите в системе расширения файлов, как вы без этого живёте?!

Добавлено через 4 минуты
ofstream ClientFile ("ListOfPaket", ios::binary | ios::app ); Расширение у имени файла где?
Yandex
Объявления
02.08.2012, 22:23     Флаги при работе с бинарными файлами
Ответ Создать тему
Опции темы

Текущее время: 08:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru