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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 88, средняя оценка - 4.88
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
#1

ios::app,ios::ate,различия - C++

17.04.2011, 14:46. Просмотров 11894. Ответов 2
Метки нет (Все метки)

Есть такая формулировка:
Модификатор ate сохраняет содержимое файла, если он существует, и усатанавливает указатель в конец файла при открытии; app - то же самое, с той лишь разницей, что устанавливает указатель в конец файла перед каждой записью в файл (т.е. записывать можно только в конец файла).
Отсюда Как записать текст в файл, не меняя его содержимого?

Посмотрим другую формулировку:
ios_base::app append output
ios_base::ate seek to EOF when opened
Отсюда http://www.cppreference.com/wiki/io/io_flags
ate ставит указатель в EOF(конец файла).
Но что все таки делает app? Англ. я не знаю, поэтому перевести корректно не могу.

Теперь рассмотрим часть кода:
C++
1
2
3
4
5
6
7
8
9
...
fstream p(FILENAME, ios::in | ios::out | ios::ate);
if(!p)
{
     p.open(FILENAME, ios::app);
     p.close();
     p.open(FILENAME, ios::in | ios::out | ios::ate);
}
...
В 3 строке программа пытается открыть файл.
Если файла нет, то переходим к 6 строке.
В 6 строке создается файл. Если убрать из третьей строки ios::app, то файл не создается!
В 8 строке открываем файл и ставим указатель в конец файла.

Так все таки, что делает app? Создает файл, если его нет? Или что?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2011, 14:46     ios::app,ios::ate,различия
Посмотрите здесь:

setiosflags(ios::left) C++
ios::nocreate C++
C++ std::ios::hex или std::ios.hex
C++ ios::app не позволяет работать с seekp() или Update файла без удаления в нем информации при его октрытии
C++ setiosflags(ios::left)
C++ не работает ios::in|ios::out
Приложение под iOS C++
Разница между ios::ate и ios::app C++
C++ Ios::out не открывает файл
Ios::ate и ios::app C++
Ios::ate затирает файл C++
C++ IDE на IOS

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
17.04.2011, 15:31     ios::app,ios::ate,различия #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
В режиме app данные записываются строго в конец файла, даже если до этого указатель смещалься функцией seek, при записи он будет автоматически смещен в конец.
В режиме ate указатель утанавливается в конец файла при открытии, но записывать можно в любую часть файла, смещая указатель функцией seek.
Цитата Сообщение от Chelioss Посмотреть сообщение
fstream p(FILENAME, ios::in | ios::out | ios::ate);
if(!p)
{
p.open(FILENAME, ios::app);
p.close();
p.open(FILENAME, ios::in | ios::out | ios::ate);
}
Цитата Сообщение от Chelioss Посмотреть сообщение
Если файла нет, то переходим к 6 строке.
В 6 строке создается файл. Если убрать из третьей строки ios::app, то файл не создается!
C++
1
2
3
4
5
6
7
fstream p(FILENAME, ios::in | ios::out | ios::ate);
if(!p)
{
 p.open(FILENAME, ios::out);
 p.close();
 p.open(FILENAME, ios::in | ios::out | ios::ate);
}
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
17.04.2011, 16:03  [ТС]     ios::app,ios::ate,различия #3
Вот сейчас вы более понятно написали, что такое app. Ту вашу формулировку я не очень хорошо понял.
Значит файл не создавался не из-за модификатора app, а из-за того, что не было ни одного модификатора из app,out,ate.
Спасибо.
Yandex
Объявления
17.04.2011, 16:03     ios::app,ios::ate,различия
Ответ Создать тему
Опции темы

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