Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение и запись одним потоком, Невозможно...? 
V
    Опции темы
insidex
Дата 19.3.2007, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 23.11.2006

Репутация: нет
Всего: нет



Господа, подскажите, каким образом (если возможно) осуществить запись и чтение данных для одного файлового потока, так не пашет  smile 

Код

fstream Fstatus("status.edb",ios::out | ios::in);
    char sbuffer[128];
    Fstatus >> sbuffer;
    cout << sbuffer;

    //Fstatus.seekp(0,ios::beg);
    //Fstatus.seekg(0,ios::beg);

    Fstatus << 123456;


Последней записи вообще не происходит ?!

Неужели необходимо использовать два класса ifstream и ofstream  smile ???
PM MAIL   Вверх
Xenon
Дата 19.3.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



insidex, У тебя файл открывается с std::ios::in, чего же ты хочешь? smile Ты должен закрыть файл и открыть с std::ios::out, чтобы иметь возможность записи. Используй буфер, в который будешь сгонять все содержимое и только после длительного время грузи все в файл - когда это можно будет сделать за минимальное количество заходов.

Это сообщение отредактировал(а) Xenon - 19.3.2007, 19:21


--------------------
user posted image  
PM MAIL   Вверх
insidex
Дата 19.3.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 23.11.2006

Репутация: нет
Всего: нет



То есть получается более выгодно будет использовать Си-аналог - фопен(наме, а+) , а не открывать 2 раза файл с разными флагами через фстреам ?


PM MAIL   Вверх
Goryachev
Дата 20.3.2007, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 23.2.2005
Где: Израиль

Репутация: нет
Всего: нет



Лучше fopen(name,"rb+") или fopen(name,"rt+")
PM MAIL   Вверх
JackYF
Дата 20.3.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



fstream поддерживает одновременно параметры ios::in и ios::out.
Проверь наличие всяких флагов ошибки после чтения, а также корректное закрытие файла после всего этого дела.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
insidex
Дата 20.3.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 23.11.2006

Репутация: нет
Всего: нет



Хз, хз....

Пример выше вроде бы корректный (про два флага одновременно я то знаю smile ), только все равно запись не производится,
Короче забил на потоки, fopen() все еще рулит  smile 

Это сообщение отредактировал(а) insidex - 20.3.2007, 18:45
PM MAIL   Вверх
Xenon
Дата 20.3.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



JackYF, вот не знаю, я пробовал побайтовым логическим и создать объект класса fstream с подержкой как ios::in так и ios::out - все компилировалось без ошибок, но как не пытался - файл вообще не создавался. Я сначала делал file << variable, затем std::cout << file; (предварительно, конечно, перемотав)


--------------------
user posted image  
PM MAIL   Вверх
_stranger_
Дата 20.3.2007, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 3.10.2006
Где: город-герой Киев

Репутация: 2
Всего: 2



вот так все должно получиться  smile 
Код


    fstream Fstatus("status.edb",ios::out | ios::in);
    char sbuffer[128];
    Fstatus >> sbuffer;
    cout << sbuffer;

    Fstatus.clear();
    Fstatus.seekg(0,ios::end);  // записываем в конец файла

    Fstatus << 123456;
    

PM MAIL   Вверх
insidex
Дата 20.3.2007, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 23.11.2006

Репутация: нет
Всего: нет



_stranger_, 
Респект  smile  действительно пашет, чуял что флаги почистить надо  smile , жаль уже на Си-стиль переписал.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0543 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.