• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

работа с файлом

  • Автор темы rossik
  • Дата начала
R

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();

Для начала хотела, чтобы сравнивала с одним словом, но даже это не работает(((
 
A

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");
сам не компилил, но думаю смысл понятен...
 
R

rossik

Спасибо!Смысл понятен, но вылезает ошибка на последней строчке...в файл не записывает. Может что-то с типами данных, не знаете?Никогда не имела дела с SaveToFile...
 
K

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;
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!