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

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

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

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

02.08.2012, 15:50. Просмотров 2491. Ответов 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 первых строк...

45
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 17:48  [ТС] #16
Открывается для чтения и записи, если неудача, то создаётся (открывается для записи)
То есть надо писать так?

C
1
2
3
4
5
ofstream FileHome ( L"NumberHomes.dat",ios::binary | ios::_Noreplace );
    if ( !FileHome ) 
    {
        ifstream FileHome ( L"NumberHomes.dat",ios::binary | ios::in)
    }
Я Вас правильно понял?
0
Avazart
Эксперт С++
7586 / 5571 / 330
Регистрация: 10.12.2010
Сообщений: 24,999
Записей в блоге: 17
02.08.2012, 17:50 #17
C++
1
ofstream FileHome ("NumberHomes.dat",ios::binary | ios::app );
0
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 17:51 #18
Цитата Сообщение от Avazart Посмотреть сообщение
В таких случаях иногда стоит делать еще и clear().
Особенно, если ошибка при открытии.

Добавлено через 38 секунд
Holsteng, точную строчку открытия, когда не открывается.
0
Avazart
Эксперт С++
7586 / 5571 / 330
Регистрация: 10.12.2010
Сообщений: 24,999
Записей в блоге: 17
02.08.2012, 17:52 #19
Чаще при достижении конца файла
0
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 17:53  [ТС] #20
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
ofstream FileHome ("NumberHomes.dat",ios::binary | ios::app );
Код
ofstream FileHome ("NumberHomes.dat",ios::binary | ios::app )
Это в теле if писать?

Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
Особенно, если ошибка при открытии.

Добавлено через 38 секунд
Holsteng, точную строчку открытия, когда не открывается.
C
1
2
3
4
5
ofstream FileHome ( "NumberHomes.dat",ios::binary | ios::_Noreplace );
    if ( !FileHome ) 
    {
        ErrorAddClient(L"Невозможно открыть файл\"NumberHomes.dat\"!");
    }
0
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 17:55 #21
C++
1
wfstream FileStreet ("Streets.dat", ios::binary | ios::app);
Так попробуйте.
0
Avazart
Эксперт С++
7586 / 5571 / 330
Регистрация: 10.12.2010
Сообщений: 24,999
Записей в блоге: 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;
0
Holsteng
47 / 10 / 3
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 17:56  [ТС] #23
Цитата Сообщение от Avazart Посмотреть сообщение
Чаще при достижении конца файла
Каша в голове. То есть, если при чтении достигаю конца (допустим в цикле), то необходимо писать
C
1
2
3
FileHome.clear();
 
FileHome.close();
правильно ?
0
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 17:56 #24
C++
1
wofstream FileHome ( "NumberHomes.dat", ios::binary);
Так попробуйте.
0
Avazart
Эксперт С++
7586 / 5571 / 330
Регистрация: 10.12.2010
Сообщений: 24,999
Записей в блоге: 17
02.08.2012, 17:58 #25
clear() чистит поток от некритичных ошибок в том числе достижения конца файла, если есть ошибка то поток дальше не хочит работать для этого надо сбрасывать ошибки clear() а еще лучше локально осуществлять открытие
0
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, удаляет данные из файла
0
Avazart
Эксперт С++
7586 / 5571 / 330
Регистрация: 10.12.2010
Сообщений: 24,999
Записей в блоге: 17
02.08.2012, 18:06 #27
ios::binary | ios::app не удаляет.
0
alsav22
5437 / 4832 / 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);
Так попробуйте.
Это создание файла?
Это создание и открытие для записи. Если файл с этим именем существует, данные стираются, если не существует - создаётся.
0
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 );
Стирает данные из файла, хоть умри. Если единократно запустить программу, да, это работает, но если я записал данные раннее, вышел из проги, запустил снова, данные удаляются.
0
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 19:37 #30
Так открывайте :
C++
1
2
3
fstream FileHome("NumberHomes.dat", ios::binary | ios::app); // открытие для чтения и дозаписи в конец. 
//Если не существует, будет создан. 
//Если существует, то данные не стираются.
0
02.08.2012, 19:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 19:37
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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