|
|
|
| Я написал прогу для работы с Базой Данных в 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);
}
|
| |
|
|
|
|
|
|
|
для: 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();
} | |
|
|
|
|
|
|
|
для: 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'
? | |
|
|
|
|
|
|
|
для: 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 ); | |
|
|
|
|
|
|
|
для: rty
(07.03.2007 в 14:19)
| | вылазет undentified symbol dir...
Объясни мне, плиз, что такое ios::ate | ios::binary ? | |
|
|
|
|
|
|
|
для: Kostia89
(07.03.2007 в 14:35)
| | поставь nazvanie_BD вместо dir
ios::ate для seekg | |
|
|
|
|
|
|
|
для: kostia89
(07.03.2007 в 13:19)
| | for (a=0;a<60;a++)
nazvanie_BD[a]=0;
зачем нужен этот for | |
|
|
|
|
|
|
|
для: rty
(07.03.2007 в 14:17)
| | Эээ...я его просто забыл стереть) | |
|
|
|
|
|
|
|
для: kostia89
(07.03.2007 в 13:19)
| | Что за ошибка? | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: Kostia89
(07.03.2007 в 14:28)
| | зделай проверку если фаил открылся
f=fopen(nazvanie_BD,"rb");
if( !f )
{
cout <<"ne otkrilsea";
getch();
return;
} | |
|
|
|
|
|
|
|
для: rty
(07.03.2007 в 14:39)
| | Действительно не открылся... хотя файл существует...
В чем может быть дело? | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: rty
(07.03.2007 в 14:49)
| | Все заработало! Спасибо!
Еще вопрос, а есть ли разница под каким расширением сохранять файл (он будет в роли Базы Данных) ? | |
|
|
|
|
|
|
|
для: Kostia89
(07.03.2007 в 15:07)
| | помойму нету разницы | |
|
|
|