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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 87, средняя оценка - 4.99
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
#1

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

11.05.2010, 15:44. Просмотров 11329. Ответов 15
Метки нет (Все метки)

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 (......,...........,.........);
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2010, 15:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чем отличается fstream от ofstream? (C++):

ifstream/ofstream/fstream - C++
#include &lt;fstream&gt; fstream autosave; autosave.open(&quot;...autosave.txt&quot;); char x; autosave &lt;&lt; x; cout &gt;&gt;...

Нужно пояснить работу с потоками ofstream, ifstream, fstream - C++
Лектор не поставил коментариев, а я сейчас как дурак сижу разшифровую. Помогите, особенно на функции &quot;void testofiles()&quot; #include...

error C2040: key: "int [256]" отличается по уровням косвенного обращения от "std::ofstream" - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cstdlib&gt; #include &lt;time.h&gt; #include &lt;string&gt; using namespace std; #define size...

Чем отличается this от *this? - C++
Привет всем ! вот код template&lt;typename Key, typename Value&gt; Dictionary&lt;Key, Value&gt;&amp; Dictionary&lt;Key, Value&gt;::operator =(const...

Чем отличается if от (?:) - C++
Здравствуйте. Почитываю С++, сам программирую в Делфи. Вот немного запутался. В делфи есть условный оператор if, тогда как в С++ есть такой...

Чем new отличается от malloc? - C++
Чем new отличается от malloc?

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

Не по теме:

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

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

В общем, так. Советую почитать соответствующие статьи.
4
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
11.05.2010, 22:11  [ТС] #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); когда какойй вариант применять?
0
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
11.05.2010, 22:32 #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 );
То есть, если вы не укажите второго параметра, компилятор при компиляции поставит указанные в прототипе. В данном случае - ввод/вывод в текстовом режиме с перезаписью.
2
Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
14.05.2010, 12:54  [ТС] #12
а еще вот такой вопрос.. в пхп много режимов открытия файла а в с++ мало - как это компенсировать?

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

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

Чем отличается ln , lg, и log ? - C++
и как реализуются эти функцию в c++

Чем отличается С++ от Visual С++? - C++
Здравствуете товарищи программисты! Только начал изучать язык программирования С++ и возникло пару вопросов. Чем отличается С++ от Visual...

Чем C++ отличается от C++ Builder? - C++
Чем C++ отличается от C++ Builder? И если имеется желание писать именно в C++, а не в билдере, то что для этого ещё надо освоить и каким...

Чем отличается fopen от ifstream? - C++
сабж...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.05.2010, 21:04
Ответ Создать тему
Опции темы

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