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

Чем отличается fstream от ofstream? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 87, средняя оценка - 4.99
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
11.05.2010, 15:44     Чем отличается fstream от ofstream? #1
1 - скажите чем отличается fstream От ofstream?
2 -
C++
1
2
3
  ofstream file1("file.txt");
   for(int i=0; i<n; i++)
       file1 << a[i] << " ";
при открытие файла не указано для чего открыт файл. ДЛя чтнения или для вывода. как так?
второй параметр ios: где посмореть полный список и что значят они?

3 - есть ли такой режим чтобы можно было и читать и записывать одновременно?
4 - дайте прототип fstream (......,...........,.........);
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Crudelis
Шаровик затейник
 Аватар для Crudelis
668 / 410 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
11.05.2010, 15:48     Чем отличается fstream от ofstream? #2
дополню вопрос, что лучше использовать fopen, fstream или ofstream какая разница, объясните пожалуйста, я обычно использую fopen, вижу многие используют fstream, какая разница?
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
11.05.2010, 15:50  [ТС]     Чем отличается fstream от ofstream? #3
Цитата Сообщение от Crudelis Посмотреть сообщение
дополню вопрос, что лучше использовать fopen, fstream или ofstream какая разница, объясните пожалуйста, я обычно использую fopen, вижу многие используют fstream, какая разница?
fopen - C
fstream - C++
Crudelis
Шаровик затейник
 Аватар для Crudelis
668 / 410 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
11.05.2010, 16:05     Чем отличается fstream от ofstream? #4
Цитата Сообщение от Krist_ALL Посмотреть сообщение
fstream - C++
а синтаксис такой же?
fstream("путь","параметр открытия(чтение/запись)") и еще вопрос, почему без полного типу к файлу он у меня не открывается, ведь всё лежит в папке проекта, вижу часто люди спользуют такой прототип
fopen("test.txt","r");
а мне нужно писать полный путь чтоб открыл файл, не пойму почему так
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
11.05.2010, 21:12     Чем отличается fstream от ofstream? #5
а мне нужно писать полный путь чтоб открыл файл, не пойму почему так
Потому что текущий каталог когда запускаешь из-под среды не совпадает с тем где лежит твой test.txt
Выстави текущий в среде на нужный каталог - будет тебе счастье
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.05.2010, 21:27     Чем отличается fstream от ofstream? #6
Цитата Сообщение от Krist_ALL Посмотреть сообщение
скажите чем отличается fstream От ofstream?
fstream - поток ввода/вывода, ofstream - поток вывода.
Цитата Сообщение от Krist_ALL Посмотреть сообщение
при открытие файла не указано для чего открыт файл. ДЛя чтнения или для вывода. как так?
См. ответ №1.
Цитата Сообщение от Krist_ALL Посмотреть сообщение
есть ли такой режим чтобы можно было и читать и записывать одновременно?
См. ответ №1.
Цитата Сообщение от Krist_ALL Посмотреть сообщение
дайте прототип fstream
fstream не функция, у него нет прототипа.

Не по теме:

Есть вопросы? Не знаете у кого спросить? Забанили на google? Обращайтесь: MSDN, cplusplus.com.

Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
11.05.2010, 21:44  [ТС]     Чем отличается fstream от ofstream? #7
fstream - поток ввода/вывода, ofstream - поток вывода.
тоесть если я пишу fstream g; g.open('ffff.txt); то я могу читать и писать в файл да?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.05.2010, 21:49     Чем отличается fstream от ofstream? #8
Krist_ALL, именно так. Вопрос лишь в том надо ли одновременно читать и писать.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
11.05.2010, 21:58     Чем отличается fstream от ofstream? #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
По порядку:

fstream - это класс. Как и ifstream и ofstream. Первый комбинирует в себе свойства двух последних. Они наследуют сви свойства от istream и ostream. То есть, работа с файлом происходит почти так же, как и работа с консолью - через operator>> и operator<< - это в текстовом режиме. То есть, создав объект класса fstream и передав конструктору параметры, можно начать работать с соответствующим файлом. Если он был открыт. Если нет - ничего не выйдет. Для проерки этого в классе fstream есть функция bool is_open() (или bool isopen(), уже не помню), которая возвращает 1 если файл открыт и 0, если нет доступа. В этом случае, если программа для Windows, с помощью GetLastError() можно получить код ошибки (поправьте меня если я не прав!!!).

Параметры конструктору:
указатель на char[] с именем файла,
и битовая маска флагов.

Флаги:
ios::in - ввод, ios::out - вывод с перезаписью, ios::binary - двоичный режим (иначе текстовый), ios::app - вывод с дописыванием в конец файла. Вроде все.

В двоичном режиме доступен произвольный доступ к файлу (то есть возможность переместиться в любой участок файла). В текстовом - только последовательный (фарш невозможно провернуть назад, мясо из котлет не восстановишь). Когда не нужен произвольный доступ, нет смысла с ним возиться.

Для навигации в двоичном режиме используется функция seekp(int, int) для вывода (put) и seekg(int, int) для ввода (get). Параметры:
Смещение относительно позиции
Сама позиция. Бывает трёх видов:

ios::begin - относительно начала файла, ios::cur - относительно текущей позиции, ios::end - относительно конца файла.

Чтобы выяснить текущую позицию, используется int tellp() для позиции вывода и tellg() - для позиции ввода.

После работы с файлом ОБЯЗАТЕЛЬНО ЕГО ЗАКРЫВАЙТЕ! Для этого есть функция close(). Так же, для открытия файла, помимо конструктора, есть функция open(char *, int).

В общем, так. Советую почитать соответствующие статьи.
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
11.05.2010, 22:11  [ТС]     Чем отличается fstream от ofstream? #10
talis, гиганское спасибо! я читаю много чего но всеранвно вопросы то появляются)

вот еще несколько:
1 - я пишу fstream a('lala.txt',ios::in); - я открыл файл для чтения - правильно?
2 -
ios::binary - двоичный режим (иначе текстовый),
непонял когда текстовый а когда бинарный?

3 - я опять не понял чем отличается
fstream a;
a.open('lala.txt'); - какой режим открытия - можно ли перемещатся по тексту?

fstream a('lala.txt',ios::out); когда какойй вариант применять?
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
11.05.2010, 22:32     Чем отличается fstream от ofstream? #11
1. Да, если операционка позволила.
2. Если указан ios::binary - режим двоичный, если не указан - режим текстовый.
3. Между
C++
1
fstream file("hello.text", ios::in);
и
C++
1
2
fstream file;
file.open("hello.text", ios::in);
Разницы нет. Я использую второй вариант - но это моя собственная привычка.
Если написать
C++
1
file.open('lala.txt');
ошибки не получите - второй параметр является так называемым параметром по-умолчанию. Прототип функции определён так:
C++
1
2
void open ( const char * filename,
            ios_base::openmode mode = ios_base::in | ios_base::out );
То есть, если вы не укажите второго параметра, компилятор при компиляции поставит указанные в прототипе. В данном случае - ввод/вывод в текстовом режиме с перезаписью.
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
14.05.2010, 12:54  [ТС]     Чем отличается fstream от ofstream? #12
а еще вот такой вопрос.. в пхп много режимов открытия файла а в с++ мало - как это компенсировать?

Режим Описание

r Только чтение. Указатель текущей позиции устанавливается в начало файла
r+ Чтение и запись. Указатель текущей позиции устанавливается в начало файла
w Только запись. Указатель текущей позиции устанавливается в начало файла, а все содержимое файла уничтожается. Если файл не существует, функция пытается создать его
w+ Чтение и запись. Указатель текущей позиции устанавливается в начало файла, а все содержимое файла уничтожается. Если файл не существует, функция пытается создать его
a Только запись. Указатель текущей позиции устанавливается в конец файла. Если файл не существует, функция пытается создать его
a+ Чтение и запись. Указатель текущей позиции устанавливается в конец файла. Если файл не существует, функция пытается создать его
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.05.2010, 18:11     Чем отличается fstream от ofstream? #13
Цитата Сообщение от Krist_ALL Посмотреть сообщение
а еще вот такой вопрос.. в пхп много режимов открытия файла а в с++ мало - как это компенсировать?
Зачем тебе много режимов. Ты либо пишешь, либо читаешь, либо и то и другое вместе. Другого не дано. Так что компенсировать то особо нечего, все что действительно нужно есть.
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
14.05.2010, 18:19  [ТС]     Чем отличается fstream от ofstream? #14
как например открыфть и писать в конец файла?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2295 / 1665 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.05.2010, 21:04     Чем отличается fstream от ofstream? #15
Krist_ALL, один из двух конструктора потока вывода std::ofstream принимает имя файла, а также комбинацию флагов, благодаря которой можно нужным образом настроить поток.
В твоем случае это будет выглядеть следующим образом:
C++
1
std::ofstream file("file.txt", std::ios_base::out | std::ios_base::ate);
out'ом указываем, что будем использовать поток для вывода, ate заставляет поток перенести индикатор позиции потока в конец файла при открытии.
Подробнее про этот конструктор можешь прочитать здесь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2016, 17:50     Чем отличается fstream от ofstream?
Еще ссылки по теме:

C++ Чем отличается Абстрагирование от Наследования?
Чем отличается описание от определения C++
Чем C++ отличается от C++ Builder? C++
C++ Чем отличается if от (?:)
C++ Чем отличается istringstream от stringstream?

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

Или воспользуйтесь поиском по форуму:
Seriy_A
3 / 3 / 0
Регистрация: 19.02.2016
Сообщений: 46
06.04.2016, 17:50     Чем отличается fstream от ofstream? #16
а если нужно читать и писать (не в конец а по seekp) текстовый файл при условии что его нужно создать при отсутствии?
Yandex
Объявления
06.04.2016, 17:50     Чем отличается fstream от ofstream?
Ответ Создать тему
Опции темы

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