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

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

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

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

17.04.2011, 14:46. Просмотров 13194. Ответов 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? Создает файл, если его нет? Или что?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2011, 14:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ios::app,ios::ate,различия (C++):

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

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

Ios::ate затирает файл - C++
Код: ofstream fout("D:\\a.com", ios::out | ios::binary | ios::ate); fout.seekp(0, ios::beg); fout.put(num);

ios::app не позволяет работать с seekp() или Update файла без удаления в нем информации при его октрытии - C++
Здравствуйте форумчане. В общем вот как можно сформулировать задание. Есть файл с каким либо содержанием. Заменить первые 3 буквы в этом...

не работает ios::in|ios::out - C++
Здорова господа!!! Пытаюсь разобраться с файлами в С++ от есть код: #include <iostream> using std::cout; using std::cin; ...

std::ios::hex или std::ios.hex - C++
привет в коде встретил вот такую строчку ss.setf(std::ios.hex, std::ios::basefield); и на VS2008 это работает. Разве это...

2
kazak
3038 / 2359 / 157
Регистрация: 11.03.2009
Сообщений: 5,405
Завершенные тесты: 1
17.04.2011, 15:31 #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);
}
4
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
17.04.2011, 16:03  [ТС] #3
Вот сейчас вы более понятно написали, что такое app. Ту вашу формулировку я не очень хорошо понял.
Значит файл не создавался не из-за модификатора app, а из-за того, что не было ни одного модификатора из app,out,ate.
Спасибо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2011, 16:03
Привет! Вот еще темы с ответами:

IDE на IOS - C++
Люди, подскажите пожалуйста, есть ли на ios среда разработки С++, как C4Droid на андроид, чтобы покодить можно было. А то ПК нет....

ios::nocreate - C++
Доброго вечера. 13 строка ,а именно "nocreate" подчеркивается красным,подскажите в чем ошибка? #include <cstdlib> #include <iostream>...

setiosflags(ios::left) - C++
Почему setiosflags(ios::right) выравнивает числа по правой стороне а setiosflags(ios::left) не выравнивает по левой? for (int n=1;...

setiosflags(ios::left) - C++
int main() { setlocale(LC_ALL, "Rus"); cout << setiosflags(ios::left)<< setfill('.') << setw(10) << "Фамилия" << setfill('.')...


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

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

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