Форум: Форум C++Разное
Новые темы: 00
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не работают fseek и fread на C++...помогите
 
 автор: kostia89   (07.03.2007 в 13:19)   письмо автору
 
 

Я написал прогу для работы с Базой Данных в C++ Builfer как консольное приложение . Но не работают функции fseek и fread...вылазет ошибка. Помогите, пожалуйста. Вот код программы:
  
 FILE* f;
  struct BD
   {
    int nomer; 
    string nazvanie; 
    string artikul; 
    double cena; 
    int kolvo; 
   } tovar; 
  char nazvanie_BD[60];
  int a=0,i;
  cin>>nazvanie_BD;
  for (a=0;a<60;a++)
   nazvanie_BD[a]=0;
    a=0;
  while (nazvanie_BD[a]!=0)  
   {
    a++;
   }
  nazvanie_BD[a]='.';
  nazvanie_BD[a+1]='t';
  nazvanie_BD[a+2]='x';
  nazvanie_BD[a+3]='t';
  f=fopen(nazvanie_BD,"rb");
  i=1;
  fseek(f,i*sizeof(struct BD),SEEK_SET); 
  fread(&tovar,sizeof(struct BD),1,f);
  cout<<tovar.nomer<<" "<<tovar.nazvanie<<" ";
  cout<<tovar.artikul<<" "<<tovar.cena<<" "<<tovar.kolvo;
  fclose(f);
 }

  Ответить  
 
 автор: rty   (07.03.2007 в 13:57)   письмо автору
 
   для: kostia89   (07.03.2007 в 13:19)
 

попробуй так

struct BD
{
int nomer;
string nazvanie;
string artikul;
double cena;
int kolvo;
} tovar;
char nazvanie_BD[60];
cin>>nazvanie_BD;
strcat( nazvanie_BD, ".txt" );

ofstream file(nazvanie_BD, ios::ate | ios::binary);
file.seekg( 0 );
file.read(&tovar,sizeof(struct BD));
cout<<tovar.nomer<<" "<<tovar.nazvanie<<" ";
cout<<tovar.artikul<<" "<<tovar.cena<<" "<<tovar.kolvo;
file.close();
}

  Ответить  
 
 автор: Kostia89   (07.03.2007 в 14:17)   письмо автору
 
   для: rty   (07.03.2007 в 13:57)
 

Вылезают две ошибки:
1) [C++ Error] kurs.cpp(98): E2316 'seekg' is not a member of 'ofstream'
2) [C++ Error] kurs.cpp(99): E2316 'read' is not a member of 'ofstream'
?

  Ответить  
 
 автор: rty   (07.03.2007 в 14:19)   письмо автору
 
   для: Kostia89   (07.03.2007 в 14:17)
 

#include<fstream.h>

и попробуй fstream file( dir, ios::in | ios::ate | ios::binary );
или ifstream file( dir, ios::ate | ios::binary );

  Ответить  
 
 автор: Kostia89   (07.03.2007 в 14:35)   письмо автору
 
   для: rty   (07.03.2007 в 14:19)
 

вылазет undentified symbol dir...
Объясни мне, плиз, что такое ios::ate | ios::binary ?

  Ответить  
 
 автор: rty   (07.03.2007 в 14:42)   письмо автору
 
   для: Kostia89   (07.03.2007 в 14:35)
 

поставь nazvanie_BD вместо dir

ios::ate для seekg

  Ответить  
 
 автор: rty   (07.03.2007 в 14:17)   письмо автору
 
   для: kostia89   (07.03.2007 в 13:19)
 

for (a=0;a<60;a++)
nazvanie_BD[a]=0;

зачем нужен этот for

  Ответить  
 
 автор: Kostia89   (07.03.2007 в 14:17)   письмо автору
 
   для: rty   (07.03.2007 в 14:17)
 

Эээ...я его просто забыл стереть)

  Ответить  
 
 автор: cheops   (07.03.2007 в 14:20)   письмо автору
 
   для: kostia89   (07.03.2007 в 13:19)
 

Что за ошибка?

  Ответить  
 
 автор: Kostia89   (07.03.2007 в 14:28)   письмо автору
 
   для: cheops   (07.03.2007 в 14:20)
 

Программа запускается...но когда выполнение доходит до команды fseek вылазиет сообщение:
Debugger Excepter Notification
Project kursach.exe raised exception class EAccsessViolation with message 'Access violation at adress 32655441. Read at adress 00000016'. Process stoped. Use Step or Run to continue.

  Ответить  
 
 автор: rty   (07.03.2007 в 14:39)   письмо автору
 
   для: Kostia89   (07.03.2007 в 14:28)
 

зделай проверку если фаил открылся

f=fopen(nazvanie_BD,"rb");

if( !f )
{
cout <<"ne otkrilsea";
getch();
return;
}

  Ответить  
 
 автор: Kostia89   (07.03.2007 в 14:44)   письмо автору
 
   для: rty   (07.03.2007 в 14:39)
 

Действительно не открылся... хотя файл существует...
В чем может быть дело?

  Ответить  
 
 автор: rty   (07.03.2007 в 14:49)   письмо автору
 
   для: Kostia89   (07.03.2007 в 14:44)
 

FILE* f;
struct BD
{
int nomer;
string nazvanie;
string artikul;
double cena;
int kolvo;
} tovar;
char nazvanie_BD[60];
int a=0,i;
cin>>nazvanie_BD;
strcat( nazvanie_BD, ".txt" );

f=fopen(nazvanie_BD,"rb");
if( !f )
{
cout <<"ne otkrilse";
getch();
return;
}
i=1;
fseek(f,i*sizeof(struct BD),SEEK_SET);
fread(&tovar,sizeof(struct BD),1,f);
cout<<tovar.nomer<<" "<<tovar.nazvanie<<" ";
cout<<tovar.artikul<<" "<<tovar.cena<<" "<<tovar.kolvo;
fclose(f);
}

for стирает имя фаила, напиши этот код
и фаил должен находится в той же директории где и .exe

  Ответить  
 
 автор: Kostia89   (07.03.2007 в 15:07)   письмо автору
 
   для: rty   (07.03.2007 в 14:49)
 

Все заработало! Спасибо!
Еще вопрос, а есть ли разница под каким расширением сохранять файл (он будет в роли Базы Данных) ?

  Ответить  
 
 автор: Oligarx   (09.03.2007 в 12:22)   письмо автору
 
   для: Kostia89   (07.03.2007 в 15:07)
 

помойму нету разницы

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования