Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/41: Рейтинг темы: голосов - 41, средняя оценка - 4.68
 Аватар для Holsteng
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246

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

02.08.2012, 15:50. Показов 8548. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.08.2012, 15:50
Ответы с готовыми решениями:

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

Есть ли литература по работе с бинарными файлами?
Здравствуйте. Есть ли литература по работе с бинарными файлами на JAVA? За ранее спасибо!

Переписать исходник С под С# по работе с бинарными файлами
Есть код под Си (брал исходник в интернете, нужно было для работы, чуть правил): #define _CRT_SECURE_NO_WARNINGS #include...

45
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 17:00
Создание файла
Это не создание, а открытие для чтения и записи. Файл уже должен существовать. Данные при открытии не стирается.
1
 Аватар для cybersonner
98 / 49 / 4
Регистрация: 24.12.2011
Сообщений: 101
02.08.2012, 17:01
тут я не понимаю, на чем ты пишешь. но, в апи есть функция SetFilePointer
C
1
SetFilePointer(hFile, 0, 0, FILE_END);
то есть установить на 0 позицию с конца.
поищи, у тебя тоже должна быть такая функция.
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 17:02
Цитата Сообщение от Holsteng Посмотреть сообщение
Запись в файл
Это создание файла (если не было) и открытие для записи. Если файл уже существовал, то данные из него стираются.
1
 Аватар для Holsteng
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 17:05  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Это не создание, а открытие для чтения и записи. Файл уже должен существовать. Данные при открытии не стирается.
А каким флагом создается файл?

Добавлено через 2 минуты
Цитата Сообщение от cybersonner Посмотреть сообщение
тут я не понимаю, на чем ты пишешь. но, в апи есть функция SetFilePointer
C
1
SetFilePointer(hFile, 0, 0, FILE_END);
то есть установить на 0 позицию с конца.
поищи, у тебя тоже должна быть такая функция.
А где мне взять hFile?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 17:09
Цитата Сообщение от Holsteng Посмотреть сообщение
ofstream FileStreet (L"Streets.dat", ios::ate )
Для добавления в конец файла, нужно так:
C++
1
ofstream FileStreet (L"Streets.dat", ios::app)
Добавлено через 3 минуты
Для создания (один раз) :
C++
1
 ofstream FileStreet ( L"Streets.dat", ios::binary  );
1
 Аватар для Holsteng
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 17:09  [ТС]
Уважаемый alsav22, не хочу сомневаться в вашей компетентности, но взял в книге Дейтелов по ate такую фразу
C
1
2
3
Открыть файл для вывода и переместиться в конец файла 
(обычно применяется для дописывания данных в конец файла). 
Данные могут быть записаны в любое место файла
.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 17:15
Если уже создан, создание обходить, и открывать для записи в конец или для чтения. После каждого открытия, не забывать закрывать.

Добавлено через 1 минуту
Цитата Сообщение от Holsteng Посмотреть сообщение
Уважаемый alsav22, не хочу сомневаться в вашей компетентности
Можете вполне сомневаться, но советую вот так дописывать в конец файла:
C++
1
ofstream FileStreet (L"Streets.dat", ios::app);
Добавлено через 2 минуты
С ate , помню, была заморочка. Но ни что не мешает проверить, как лучше.
1
 Аватар для Holsteng
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 17:29  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Если уже создан, создание обходить, и открывать для записи в конец или для чтения. После каждого открытия, не забывать закрывать.

Добавлено через 1 минуту

Можете вполне сомневаться, но советую вот так дописывать в конец файла:
C++
1
ofstream FileStreet (L"Streets.dat", ios::app);
Написал как вы советовали, но вылетает, что невозможно открыть файл

Code
1
2
3
4
5
6
7
8
9
void CableTV::FileForStreet()
{
    fstream FileStreet ( L"Streets.dat",ios::binary );
    if ( !FileStreet ) 
    {
        ErrorAddClient(L"Невозможно открыть файл\"Streets.dat\"!");
    }
    
}
А как обходить создание, если при запуске проргаммы срабатывает функция создания, может использовать флаг _Nocreate?

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

Добавлено через 13 минут
Использовал ios::_Noreplace
C
1
2
3
4
5
ofstream FileStreet ( L"Streets.dat",ios::binary | ios::_Noreplace );
    if ( !FileStreet ) 
    {
        ErrorAddClient(L"Невозможно открыть файл\"Streets.dat\"!");
    }
данные в файле не стираются,но вылетает ошибка, почему?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 17:30
Сейчас проверил открытие с флагом ate. При открытии для записи, происходит стирание данных. Если открыть для чтения или для чтения и записи, то нормально.
1
 Аватар для Holsteng
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 17:31  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Сейчас проверил открытие с флагом ate. При открытии для записи, происходит стирание данных. Если открыть для чтения или для чтения и записи, то нормально.
Когда была такая ерунда, вспоминаю...
А что если не закрою поток? При выходе из блока он не закроется сам?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 17:41
Давайте по порядку. Не нужно дёргаться. Обход делается, например, так. Открывается для чтения и записи, если неудача, то создаётся (открывается для записи). Теперь, почему не открывается. Проверьте имя. Есть ли ли в папке проекта такой файл.

Добавлено через 1 минуту
Цитата Сообщение от Holsteng Посмотреть сообщение
А что если не закрою поток?
Бывали заморочки, поэтому нужно закрывать, перед следующим открытием.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.08.2012, 17:43
При выходе из блока он не закроется сам?
Закроется.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 17:44
L уберите перед названием файла.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.08.2012, 17:45
Бывали заморочки, поэтому нужно закрывать, перед следующим открытием.
В таких случаях иногда стоит делать еще и clear().
0
 Аватар для Holsteng
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 17:48  [ТС]
Открывается для чтения и записи, если неудача, то создаётся (открывается для записи)
То есть надо писать так?

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
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.08.2012, 17:50
C++
1
ofstream FileHome ("NumberHomes.dat",ios::binary | ios::app );
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 17:51
Цитата Сообщение от Avazart Посмотреть сообщение
В таких случаях иногда стоит делать еще и clear().
Особенно, если ошибка при открытии.

Добавлено через 38 секунд
Holsteng, точную строчку открытия, когда не открывается.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.08.2012, 17:52
Чаще при достижении конца файла
0
 Аватар для Holsteng
48 / 11 / 2
Регистрация: 26.03.2012
Сообщений: 246
02.08.2012, 17:53  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
ofstream FileHome ("NumberHomes.dat",ios::binary | ios::app );
Code
1
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.08.2012, 17:53
Помогаю со студенческими работами здесь

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

Ошибка при работе с файлами
Всем привет! Кто подскажет, почему не работает этот код: FILE *file; int i = 0; if((file = fopen(baseFile, &quot;r&quot;)) ==...

Ошибка при работе с файлами
Столкнулся с такой проблемой, что если выбран FileMode.OpenOrCreate, то значения в массив выводятся те, которые я вводил до этого(смотреть...

Многопоточность при работе с файлами
Доброй ночи! Написал код для сравнения двух файлов: string text, text2; bool write = true; a...

Ошибка при работе с файлами
Sub â_ïðîåêòèðîâàíèå() If Dir(ActiveWorkbook.Path &amp; &quot;\Google Äèñê\Projects\&quot; &amp; Worksheets(&quot;èñõîäíûå äàííûå&quot;).Cells(1, 2).Value,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
ПЛИС
zxcha1ka_ 27.01.2026
AHDL Разработать программы для синтеза следующих устройств: 1. Параллельного регистра 4-х разрядного с синхронной загрузкой и асинхронным сбросом (обнулением); Пoмoгитe пoжaлyйстa
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru