Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2009, 21:15   #11
Darth.Vader
Пользователь
 
Аватар для Darth.Vader
 
Регистрация: 04.12.2009
Сообщений: 63
По умолчанию

Ещё вопрос: как не только закрыть файл, но и освободить имя потока? Например, я открываю так ifstream file..., а потом мне нужно ofstream file...
file.close не помогает.
Darth.Vader вне форума Ответить с цитированием
Старый 29.12.2009, 21:16   #12
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от RoS Посмотреть сообщение
Но с другой стороны у него файл либо пустой, либо там кол-во структур и дальше сами структуры, так что поидее за read не может идти eof...
Всё верно, ошибка будет только если файл пустой. Проблема в том, что eof() не вернёт true, пока не наткнётся на символ "конец файла". А он не наткнётся на него пока не попытаться что-то прочитать из файла )
Цитата:
Сообщение от Darth.Vader
Ещё вопрос: как не только закрыть файл, но и освободить имя потока? Например, я открываю так ifstream file..., а потом мне нужно ofstream file...
file.close не помогает.
Никак, это имя будет зарезервировано в текущей области видимости до конца этой области видимости, точно также как и с обычными переменными типа int или char, или...

Последний раз редактировалось netrino; 29.12.2009 в 21:18.
netrino вне форума Ответить с цитированием
Старый 29.12.2009, 21:33   #13
Darth.Vader
Пользователь
 
Аватар для Darth.Vader
 
Регистрация: 04.12.2009
Сообщений: 63
По умолчанию

Сделал так... если файла нет (и он не открывается), то открываем его на запись (чем его создаём), сразу закрываем, и открываем обратно на чтение\запись... выдаёт 2 ошибки: Error 1 error C2064: term does not evaluate to a function taking 2 arguments
Код:
int AddScanner(scan_info &sci)
{
	short int number=0;

	fstream file("scinfo.bin",ios::in|ios::out|ios::binary);
	if(file.fail())//если упало,
	{
		file("scinfo.bin",ios::out|ios::binary);//то создаём ОШИБКА
		file.close();
		file("scinfo.bin",ios::in|ios::out|ios::binary);//и открываем по нормальному ОШИБКА
		file.seekp(ios::beg);
		file.write(reinterpret_cast<const char*>(&number),sizeof(short));
	}else
	{
		file.seekg(ios::beg);
		file.read(reinterpret_cast<char*>(&number),sizeof(number));
	}
	number++;
	file.seekp(ios::beg);
	file.write(reinterpret_cast<const char*>(&number),sizeof(number));
	file.seekp(sizeof(number)+(sizeof(sci)*(number-1)));
	file.write(reinterpret_cast<const char*>(&sci),sizeof(sci));
	return 0;
}
А если перед всеми конструкторами поставить-таки fstream, то выдаёт одну ошибку в последнем конструкторе: Error 1 error C2374: 'file' : redefinition; multiple initialization

Последний раз редактировалось Darth.Vader; 29.12.2009 в 21:36.
Darth.Vader вне форума Ответить с цитированием
Старый 29.12.2009, 21:36   #14
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Вы по 10 раз пытаетесь конструктор вызывать, нельзя, он только раз вызывается. Для открытия файла используйте метод open
Код:
fstream file(...);
file.open("Filename.txt", ios::in | ios::out);
netrino вне форума Ответить с цитированием
Старый 29.12.2009, 21:51   #15
Darth.Vader
Пользователь
 
Аватар для Darth.Vader
 
Регистрация: 04.12.2009
Сообщений: 63
По умолчанию

Код:
int AddScanner(scan_info &sci)
{
	short int number=0;

	fstream file("scinfo.bin",ios::in|ios::out|ios::binary);
	if(file.fail())//если упало,
	{
		file.clear();
		file.open("scinfo.bin",ios::out|ios::binary);//то создаём
		file.close();
		file.open("scinfo.bin",ios::in|ios::out|ios::binary);//и открываем по-нормальному
		file.seekp(ios::beg);
		file.write(reinterpret_cast<const char*>(&number),sizeof(short));
	}else
	{
		file.seekg(ios::beg);
		file.read(reinterpret_cast<char*>(&number),sizeof(short));
	}
	number++;
	file.seekp(ios::beg);
	file.write(reinterpret_cast<const char*>(&number),sizeof(short));
	file.seekp(sizeof(short)+(sizeof(scan_info)*(number-1)));
	file.write(reinterpret_cast<const char*>(&sci),sizeof(scan_info));
	return 0;
}
Всё учёл... не пишет\читает и всё тут.... Хотя компилятор успокоился, и файл создаётся.
Darth.Vader вне форума Ответить с цитированием
Старый 29.12.2009, 21:57   #16
Darth.Vader
Пользователь
 
Аватар для Darth.Vader
 
Регистрация: 04.12.2009
Сообщений: 63
По умолчанию

УРА, ТОВАРИЩИ!!! Нужно было исключить возможность записи нуля в новый файл, и удалить старый, созданный ранее - теперь работает!!! Всем спасибо! Окончательная версия, если кому надо:
Код:
int AddScanner(scan_info &sci)
{
	short int number=0;

	fstream file("scinfo.bin",ios::in|ios::out|ios::binary);
	if(file.fail())//если упало,
	{
		file.clear();
		file.open("scinfo.bin",ios::out|ios::binary);//то создаём
		file.close();
		file.open("scinfo.bin",ios::in|ios::out|ios::binary);//и открываем по-нормальному
	}else
	{
		file.seekg(ios::beg);
		file.read(reinterpret_cast<char*>(&number),sizeof(short));
	}
	number++;
	file.seekp(ios::beg);
	file.write(reinterpret_cast<const char*>(&number),sizeof(short));
	file.seekp(sizeof(short)+(sizeof(scan_info)*(number-1)));
	file.write(reinterpret_cast<const char*>(&sci),sizeof(scan_info));
	return 0;
}
Darth.Vader вне форума Ответить с цитированием
Старый 29.12.2009, 22:04   #17
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Код:
		file.open("scinfo.bin",ios::out|ios::binary);//то создаём
		file.close();
		file.open("scinfo.bin",ios::in|ios::out|ios::binary);//и открываем по-нормальному
а попробуй все-таки оставить одну третью строку этого кода...
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать отдельный поток для отправки письма betirsolt Работа с сетью в Delphi 2 28.12.2009 22:39
Как в VS 2008 создать поток? MaxDDT Общие вопросы C/C++ 0 11.12.2009 21:53
OpenDialog и файловый поток. (*_*) Общие вопросы C/C++ 1 03.06.2009 22:44
Создать RSS поток с помощью Web Service damned20 PHP 1 22.05.2009 13:39