Luzuk
03-11-2008, 11:24
Всем доброго времени суток!
У метя тут возникла не большая проблема, помогите, пожалуйста, с ней разобраться.
Задача:
Необходимо добавлять и находить данные о пользователях, при этом эти данные должны храниться в файле.
Проблема:
Не могу разобраться с поиском в файле, нахожу только последнюю запись.
Как должна работать программа:
Данные о пользователе хранятся в виде структуры.
struct user
{
char name[16]; //имя пользователя - строка в стиле Си (массив символов)
unsigned int len; //длина пароля
char pass[16]; //пароль пользователя - массив символов
bool block; //признак блокировки учетной записи
unsigned int opt; //признак включения ограничений на выбираемые пароли
};
Все данные хранятся в файле.
Необходима функция добавления новых пользователей в файл.
Также необходима функция поиска среди существующих пользователей по их логину и паролю в созданном файле.
Как получилось:
Получилось все, кроме поиска пользователей в файле. Точней она находит запись по пользователю, только если эта запись в конце файла, а остольные пропускает.
Вот листинг этой функции:
using namespace std;
if(FileExists("MyFile.dat")) //проверяем наличие файла
{
//открываем файл на чтение
fstream fs( "MyFile.dat", ios::in|ios::binary);
if(!fs.is_open())
stderr;
struct user uu; //структура для хранения данных
Label5->Caption="FALSE";
//fs.seekg(0);
bool exit=false; //флаг выхода из цикла
while(!exit)
{
//читаем файл и копируем текущие данные в структуру
fs.read((char *)&uu, sizeof(uu));
//если то что ввели совпало с тем что в структуре
if((Edit3->Text==uu.name) && (Edit4->Text==uu.pass))
{
Label5->Caption="OK"; //говорим OK
exit=true; //ставим флаг на выход
}
else{
fs.seekg(sizeof(uu),ios::cur); //смещаемся к следующей структуре в файле
if(!fs.eof()) exit=true; //если конец файла ставим флаг на выход
}
}
fs.close();
}
else Label5->Caption="ERROR! File not faund";
Также прикрепляю к этому посту исходники всего проекта.
Проект создан на C++ Builder 6.
У метя тут возникла не большая проблема, помогите, пожалуйста, с ней разобраться.
Задача:
Необходимо добавлять и находить данные о пользователях, при этом эти данные должны храниться в файле.
Проблема:
Не могу разобраться с поиском в файле, нахожу только последнюю запись.
Как должна работать программа:
Данные о пользователе хранятся в виде структуры.
struct user
{
char name[16]; //имя пользователя - строка в стиле Си (массив символов)
unsigned int len; //длина пароля
char pass[16]; //пароль пользователя - массив символов
bool block; //признак блокировки учетной записи
unsigned int opt; //признак включения ограничений на выбираемые пароли
};
Все данные хранятся в файле.
Необходима функция добавления новых пользователей в файл.
Также необходима функция поиска среди существующих пользователей по их логину и паролю в созданном файле.
Как получилось:
Получилось все, кроме поиска пользователей в файле. Точней она находит запись по пользователю, только если эта запись в конце файла, а остольные пропускает.
Вот листинг этой функции:
using namespace std;
if(FileExists("MyFile.dat")) //проверяем наличие файла
{
//открываем файл на чтение
fstream fs( "MyFile.dat", ios::in|ios::binary);
if(!fs.is_open())
stderr;
struct user uu; //структура для хранения данных
Label5->Caption="FALSE";
//fs.seekg(0);
bool exit=false; //флаг выхода из цикла
while(!exit)
{
//читаем файл и копируем текущие данные в структуру
fs.read((char *)&uu, sizeof(uu));
//если то что ввели совпало с тем что в структуре
if((Edit3->Text==uu.name) && (Edit4->Text==uu.pass))
{
Label5->Caption="OK"; //говорим OK
exit=true; //ставим флаг на выход
}
else{
fs.seekg(sizeof(uu),ios::cur); //смещаемся к следующей структуре в файле
if(!fs.eof()) exit=true; //если конец файла ставим флаг на выход
}
}
fs.close();
}
else Label5->Caption="ERROR! File not faund";
Также прикрепляю к этому посту исходники всего проекта.
Проект создан на C++ Builder 6.