Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Потоки ввода/вывода для файлов


Автор: Maxx 8.12.2006, 08:14
Открыто 2 потока ofstream  и ifstream для одного и того же двоичного файла. Пишем в файл.  Тут же пытаемся прочитать. А ничего... Пробовал закрыть и заново открыть потоки, но безрезультатно. Читается только после перезапуска программы. Help!!!

Автор: codelord 8.12.2006, 08:40
покажи как ты это делаешь

Автор: Earnest 8.12.2006, 08:58
Возможно просто данные остаются в буфере. Ты же не думаешь, что каждый символ сразу в файл пишется? А буферы у ввода и вывода разные. Надо после записи сделать выходному потоку flush, а потом уже читать.

Автор: Maxx 8.12.2006, 16:41
Код

===Потоки в моем классе iF===
ofstream fo;
ifstream fi;
=====================
====Начало функции 1=====
iF->fo.seekp(0);
iF->fi.open(name, ios::out|ios::binary);
iF->fo.open(name, ios::in|ios::binary);
int k=2;
iF->fo.seekp(0);
iF->fo.write((char *)&k,sizeof(k));
iF->fo.flush();
===конец функции======

====Начало функции 2====
int k;
iF->fi.seekg(0);
iF->fi.read((char *)&k,sizeof(k));
cout<<k;
===Конец функции 2======



И ничего... Даже пробовал потоки закрывать и заново открывать - не помогает
Вот единственное решение которое пока нашел это FILE.

Автор: JackYF 8.12.2006, 17:06
Цитата(Maxx @  8.12.2006,  16:41 Найти цитируемый пост)
iF->fi.open(name, ios::out|ios::binary);
iF->fo.open(name, ios::in|ios::binary);


Ты fi открыл на запись, а fo - на чтение. Надо наоборот.

Автор: Maxx 8.12.2006, 17:57
не работает... В файл пишет... В ходе работы программы смотрел, а читать не хотит!!!

Автор: JackYF 8.12.2006, 21:14
Попробуй открыть файл fi после закрытия fo.

Автор: Maxx 9.12.2006, 05:58
Файл то один и тот же!!!! А нельзя. Надо почитать - поизменять - почитать с изменениями!!!

Автор: zabivator 10.12.2006, 23:16
Maxx, попробуй использовать std::fstream вместо двх потоков. А то чорт там разбери, как они буферизуют все это барахло, и как операционка буферузует это еще сама.

Автор: Любитель 11.12.2006, 10:54
Если пишешь и читаешь в один (с одного) файл(а), то юзай std::fstream. Вызывай seekg/p перед переходом с чтения на запись. В флагах задай все три (бинари, рид, райт).

Автор: zabivator 11.12.2006, 11:11
Цитата(Любитель @ 11.12.2006,  10:54)
Если пишешь и читаешь в один (с одного) файл(а), то юзай std::fstream. Вызывай seekg/p перед переходом с чтения на запись. В флагах задай все три (бинари, рид, райт).

+1

Автор: Maxx 14.12.2006, 09:13
ОК. Я уже рахобрался. Файл открывается с исключительной блокировкой по умолчанию и второй поток тупо не откроется.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)