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

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

Восстановить пароль Регистрация
 
Andrey040601
 Аватар для Andrey040601
2 / 2 / 3
Регистрация: 13.07.2014
Сообщений: 127
Завершенные тесты: 5
05.09.2015, 22:13     Ios::ate затирает файл #1
Код:

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. Но файл весь затирается, оставляя только это число. Как сделать так, чтобы число либо добавлялось, либо заменялось, оставляя все остальное?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2015, 22:13     Ios::ate затирает файл
Посмотрите здесь:

C++ Ввод матрицы из файла - затирает последний элемент предыдущей строки
C++ ios::app,ios::ate,различия
ios::nocreate C++
C++ std::ios::hex или std::ios.hex
C++ не работает ios::in|ios::out
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
05.09.2015, 22:19     Ios::ate затирает файл #2
Ты же сам указываешь на флаг ios::ate. И в заголовке темы, и в сообщении.
Andrey040601
 Аватар для Andrey040601
2 / 2 / 3
Регистрация: 13.07.2014
Сообщений: 127
Завершенные тесты: 5
05.09.2015, 22:21  [ТС]     Ios::ate затирает файл #3
Если его убрать, ничего не поменяется. А ios::app записывает в конец файла
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11807 / 6786 / 767
Регистрация: 27.09.2012
Сообщений: 16,839
Записей в блоге: 2
Завершенные тесты: 1
05.09.2015, 22:25     Ios::ate затирает файл #4
ios::app,ios::ate,различия
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
05.09.2015, 22:30     Ios::ate затирает файл #5
Цитата Сообщение от castaway Посмотреть сообщение
Ты же сам указываешь на флаг ios::ate.
Цитата Сообщение от Andrey040601 Посмотреть сообщение
Если его убрать, ничего не поменяется. А ios::app записывает в конец файла
Цитата Сообщение от Andrey040601 Посмотреть сообщение
Как сделать так, чтобы число либо добавлялось, либо заменялось, оставляя все остальное?
У тебя мысли не связаны.
Andrey040601
 Аватар для Andrey040601
2 / 2 / 3
Регистрация: 13.07.2014
Сообщений: 127
Завершенные тесты: 5
05.09.2015, 22:35  [ТС]     Ios::ate затирает файл #6
Нужно так. В файле уже есть некий текст(код, в данном случае). Нужно добавить свой в начало. Просто, у меня стирается весь файл, оставляя только добавленный
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
05.09.2015, 22:39     Ios::ate затирает файл #7
Andrey040601, если ты внятно опишешь проблему, то шансов её решить будет больше.
Andrey040601
 Аватар для Andrey040601
2 / 2 / 3
Регистрация: 13.07.2014
Сообщений: 127
Завершенные тесты: 5
05.09.2015, 22:56  [ТС]     Ios::ate затирает файл #8
Код выше стирает вообще все содержимое файла, заменяя новым. Как сделать, чтобы новый текст можно было вводить в файл(в начало), НЕ стирая ВСЕ старое содержимое?
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
05.09.2015, 23:02     Ios::ate затирает файл #9
Средствами ОС - никак.
Читаешь содержимое файла, пишешь "начало", пишешь содержимое файла.
Avazart
 Аватар для Avazart
6893 / 5133 / 250
Регистрация: 10.12.2010
Сообщений: 22,564
Записей в блоге: 17
06.09.2015, 00:25     Ios::ate затирает файл #10
Цитата Сообщение от Andrey040601 Посмотреть сообщение
Как сделать, чтобы новый текст можно было вводить в файл(в начало),
Что бы старый тест смещался, никак.
Andrey040601
 Аватар для Andrey040601
2 / 2 / 3
Регистрация: 13.07.2014
Сообщений: 127
Завершенные тесты: 5
06.09.2015, 07:46  [ТС]     Ios::ate затирает файл #11
А заменяя старую строку новой, но прм этом оставляя последующие строки?
Mr.X
Эксперт С++
 Аватар для Mr.X
2797 / 1573 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
06.09.2015, 08:40     Ios::ate затирает файл #12
Цитата Сообщение от Andrey040601 Посмотреть сообщение
А заменяя старую строку новой, но прм этом оставляя последующие строки?
Только в бинарном режиме функцией write, но для этого нужно знать размер заменяемого участка.
nmcf
4259 / 3690 / 1243
Регистрация: 14.04.2014
Сообщений: 14,458
06.09.2015, 08:43     Ios::ate затирает файл #13
Можно записывать поверх, но тогда длина новой и старой строк должна быть одинаковой, иначе либо захватишь следующую, либо останется кусок от старой.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11807 / 6786 / 767
Регистрация: 27.09.2012
Сообщений: 16,839
Записей в блоге: 2
Завершенные тесты: 1
06.09.2015, 09:28     Ios::ate затирает файл #14
Как вариант, что нужно записать в начало, пишите в другой файл, потом в него же добавьте содержимое из старого файла. Старый под снос, новый переименовываем.
Ferrari F1
Заблокирован
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
06.09.2015, 10:55     Ios::ate затирает файл #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);
Ferrari F1
Заблокирован
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
06.09.2015, 11:04     Ios::ate затирает файл #16
ну и как было сказано, желаемое надо делать через элемент-функцию write, а не через put
C++
1
fout.seekp(0, ios::beg).write(reinterpret_cast(const char*)(&num), sizeof(num));
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
06.09.2015, 11:13     Ios::ate затирает файл #17
Ferrari F1, что это за конструкция? Помимо того что она не компилируется, она как то гипотетически может решить проблему?
Ferrari F1
Заблокирован
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
06.09.2015, 11:14     Ios::ate затирает файл #18
castaway,
Каюсь, не проверял.
Но написано, что seekp и write оба возвращают ostream& => можно осуществить каскадный вызов методов?
http://www.cplusplus.com/reference/o...ostream/write/
http://www.cplusplus.com/reference/o...ostream/seekp/
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
06.09.2015, 11:16     Ios::ate затирает файл #19
Я не о вызовах, а о том что "перемотка" в начало тут никак не поможет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2015, 11:19     Ios::ate затирает файл
Еще ссылки по теме:

Разница между ios::ate и ios::app C++
C++ Ios::out не открывает файл
Ios::ate и ios::app C++

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

Или воспользуйтесь поиском по форуму:
Ferrari F1
Заблокирован
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
06.09.2015, 11:19     Ios::ate затирает файл #20
castaway,
ну тогда мой косяк. Значит, через вспомогательный файл, как было уже написано.
Yandex
Объявления
06.09.2015, 11:19     Ios::ate затирает файл
Ответ Создать тему
Опции темы

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