Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
4 / 4 / 3
Регистрация: 13.07.2014
Сообщений: 129
1

Ios::ate затирает файл

05.09.2015, 22:13. Показов 2453. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Код:

C++
1
2
3
4
5
ofstream fout("D:\\a.com", ios::out | ios::binary | ios::ate);
 
    fout.seekp(0, ios::beg);
 
    fout.put(num);
В начало файла должно быть добавлено num. Но файл весь затирается, оставляя только это число. Как сделать так, чтобы число либо добавлялось, либо заменялось, оставляя все остальное?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2015, 22:13
Ответы с готовыми решениями:

Разница между ios::ate и ios::app
Здравствуйте, кто нить может поконкретнее и человеческим языком объяснить в чем разница между...

ios::app,ios::ate,различия
Есть такая формулировка: Отсюда https://www.cyberforum.ru/post441043.html Посмотрим другую...

Ios::ate и ios::app
Добрый день, тут на форуме вычитал, что открытие файла с включенным битом ios::app автоматически...

Ios_base::ate
Здравствуйте, не могу понять, почему следующий код выводит в место 123456 просто 456. #include...

20
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
05.09.2015, 22:19 2
Ты же сам указываешь на флаг ios::ate. И в заголовке темы, и в сообщении.
0
4 / 4 / 3
Регистрация: 13.07.2014
Сообщений: 129
05.09.2015, 22:21  [ТС] 3
Если его убрать, ничего не поменяется. А ios::app записывает в конец файла
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
05.09.2015, 22:25 4
ios::app,ios::ate,различия
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
05.09.2015, 22:30 5
Цитата Сообщение от castaway Посмотреть сообщение
Ты же сам указываешь на флаг ios::ate.
Цитата Сообщение от Andrey040601 Посмотреть сообщение
Если его убрать, ничего не поменяется. А ios::app записывает в конец файла
Цитата Сообщение от Andrey040601 Посмотреть сообщение
Как сделать так, чтобы число либо добавлялось, либо заменялось, оставляя все остальное?
У тебя мысли не связаны.
0
4 / 4 / 3
Регистрация: 13.07.2014
Сообщений: 129
05.09.2015, 22:35  [ТС] 6
Нужно так. В файле уже есть некий текст(код, в данном случае). Нужно добавить свой в начало. Просто, у меня стирается весь файл, оставляя только добавленный
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
05.09.2015, 22:39 7
Andrey040601, если ты внятно опишешь проблему, то шансов её решить будет больше.
0
4 / 4 / 3
Регистрация: 13.07.2014
Сообщений: 129
05.09.2015, 22:56  [ТС] 8
Код выше стирает вообще все содержимое файла, заменяя новым. Как сделать, чтобы новый текст можно было вводить в файл(в начало), НЕ стирая ВСЕ старое содержимое?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
05.09.2015, 23:02 9
Средствами ОС - никак.
Читаешь содержимое файла, пишешь "начало", пишешь содержимое файла.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.09.2015, 00:25 10
Цитата Сообщение от Andrey040601 Посмотреть сообщение
Как сделать, чтобы новый текст можно было вводить в файл(в начало),
Что бы старый тест смещался, никак.
0
4 / 4 / 3
Регистрация: 13.07.2014
Сообщений: 129
06.09.2015, 07:46  [ТС] 11
А заменяя старую строку новой, но прм этом оставляя последующие строки?
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
06.09.2015, 08:40 12
Цитата Сообщение от Andrey040601 Посмотреть сообщение
А заменяя старую строку новой, но прм этом оставляя последующие строки?
Только в бинарном режиме функцией write, но для этого нужно знать размер заменяемого участка.
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
06.09.2015, 08:43 13
Можно записывать поверх, но тогда длина новой и старой строк должна быть одинаковой, иначе либо захватишь следующую, либо останется кусок от старой.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
06.09.2015, 09:28 14
Как вариант, что нужно записать в начало, пишите в другой файл, потом в него же добавьте содержимое из старого файла. Старый под снос, новый переименовываем.
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.09.2015, 10:55 15
Andrey040601,
C++
1
ofstream fout("D:\\a.com", ios::out | ios::binary | ios::ate);
зачем для объекта ofstream писать ios::out?
Ios::ate затирает файл


C++
1
2
3
ofstream fout("D:\\a.com", ios::binary | ios::ate);
fout.seekp(0, ios::beg);
fout.put(num);
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.09.2015, 11:04 16
ну и как было сказано, желаемое надо делать через элемент-функцию write, а не через put
C++
1
fout.seekp(0, ios::beg).write(reinterpret_cast(const char*)(&num), sizeof(num));
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
06.09.2015, 11:13 17
Ferrari F1, что это за конструкция? Помимо того что она не компилируется, она как то гипотетически может решить проблему?
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.09.2015, 11:14 18
castaway,
Каюсь, не проверял.
Но написано, что seekp и write оба возвращают ostream& => можно осуществить каскадный вызов методов?
http://www.cplusplus.com/refer... eam/write/
http://www.cplusplus.com/refer... eam/seekp/
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
06.09.2015, 11:16 19
Я не о вызовах, а о том что "перемотка" в начало тут никак не поможет.
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.09.2015, 11:19 20
castaway,
ну тогда мой косяк. Значит, через вспомогательный файл, как было уже написано.
0
06.09.2015, 11:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.09.2015, 11:19
Помогаю со студенческими работами здесь

Ios::out не открывает файл
Доброй день! Столкнулся с такой проблемой, при вызове функции программа не открывает файл void...

Установочный файл iOS
Какой установочный файл у ios. Как называется ?? и где его нужно искать в своем проекте?? А...

Elfinder затирает $
Добрый вечер коллеги! Подключил в проект elfinder, который файловый менеджер. <!-- elFinder...

Перерисовка затирает всё
приветствую всех! такая трабла: при вызове Invalidate() в timer1_Tick() все стирается, хотя,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru