Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: работа с файлом
Форум программистов > Системное программирование > C, С++ и С Builder > Borland C++ Builder & Kylix
rossik
Помогите, пожалуйста!
Есть такая задача: дана программа, которая работает с паролями. Все пароли длиной 10 символов записываются в отдельный файл, я его назвала "paroli.txt". Когда появляется новый пароль (вводиться через форму, у меня это Form5->Edit1), программа должна проверять, не записан ли в файле paroli этот новый пароль. Если уже имеется такой, его использовать запрещается (у меня с помощь.формы 10:Form10->ShowModal()и т.д.), если такого пароля нет, он записывается в этот файл.
Вот, что я из себя выжила:
Сначала создаю файл:
if(!FileExists("paroli.txt"))
    { ofstream fout("paroli.txt",ios::out|ios::binary);
      fout<<"";
      fout.close();
    }

Потом работаю с файлом:
if(Form5->Edit1->Text.Length()==10)
    {
    ofstream fout("paroli.txt",ios::in|ios::out|ios::binary);
          if(Form5->Edit1->Text.c_str()==fin>>buf)
          Form10->ShowModal();
       else
      // смещение к концу файла
      fout.seekp(0,ios::end);
      fout<<Form5->Edit1;
      fout<<" ";
     }
      fout.close();
      fin.close();


Для начала хотела, чтобы сравнивала с одним словом, но даже это не работает(((
Anton Chik
кидаешь на форму ListBox1 (после отладки можешь сделать Visible=false)
потом навешай куда-нить
ListBox1->Items->LoadFromFile("paroli.txt");
if(ListBox1->Items->IndexOf(Form5->Edit1)!=-1)ShowMessage("Такой пароль уже был!!!");
else ListBox1->Items->Add(Form5->Edit1);// добавляем новый пароль
ListBox1->Items->SaveToFile("paroli.txt");

сам не компилил, но думаю смысл понятен...
rossik
Спасибо!Смысл понятен, но вылезает ошибка на последней строчке...в файл не записывает. Может что-то с типами данных, не знаете?Никогда не имела дела с SaveToFile...
KoMaTozZz
Вот.. попробуйте это. Как вам такой подход к выполнению задачи? =)
У меня вроде корректно работает.
Только вот проверку на файл перед записью не делал,уж сами,думаю,сможете)



#include "inifiles.hpp" // НЕОБХОДИМО!
#include "fstream.h" // ну и это не забудьте

TStringList* list;
TIniFile* ini; // глобальные

//=====BEGIN (OnCreateForm)===============

ExePath = GetCurrentDir(); //мало ли, может рабочий каталог смениться...

//=======END (OnCreateForm)===============

// ================BEGIN(функция записи пароля в файл)===================
//называйте как хотите, можете в паблик описать,или в обработчик. Лучше в паблик=)
// void TForm1::WritePass()

ini=new TIniFile(ExePath + "\\paroli.txt");
list=new TStringList;
list->LoadFromFile(ExePath + "\\paroli.txt");
list->Values[num_items] = Form5->Edit1->Text;
list->SaveToFile(ExePath + "\\paroli.txt");
delete ini,list;

// ================END(функция записи пароля в файл)===================


//======================BEGIN(OnActivate)========================

ifstream proverka((ExePath+"\\paroli.txt").c_str());
if(proverka.good())
{
proverka.close();
ini=new TIniFile(ExePath+"\\paroli.txt");
list=new TStringList;
list->LoadFromFile(ini->FileName);
ListBox1->Items->Text = list->Text;
delete list,ini;
}
else
{
proverka.close();
ShowMessage("Файл отсутствует");
}
num_items = ListBox1->Items->Count;

//=======================END(OnActivate)========================

//=====================BEGIN(OnClick(Добавить))========================

ini=new TIniFile(ExePath+"\\paroli.txt");
list=new TStringList;
list->LoadFromFile(ini->FileName);
for(a=0;a<=ListBox1->Items->Count;a++)
{
if(list->Values[a] == Form1->Edit1->Text)
{
no_ident = 0;
a=ListBox1->Items->Count;
}
else
no_ident = 1;
}
if(no_ident == 1)
{
list->Values[num_items] = Form1->Edit1->Text;
ListBox1->Items->Add(IntToStr(num_items) + '=' + Edit1->Text);
WritePass();
num_items++;
}
else
ShowMessage("Пароль был");
delete list,ini;

//======================END(OnClick(Добавить))========================

И не забудьте ещё глобально
AnsiString ExePath;
int a,num_items,no_ident;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.