【发布时间】:2016-04-14 17:55:53
【问题描述】:
我正在为一个任务做一个项目,我需要一些关于 QFile 和 QTextStream 的帮助。我想最初创建一个包含以下内容的文件(名为:users.txt):
ID Password Name and Surname Username
1 | cheese | Daniel Markov | MaDanjel
2 | something | Mika Firring | Marila
..
..
到目前为止,我得到了skrivno.txt的以下内容:
0202|Nejc Zun|nejczun|
这是代码:
void registracija::write() {
QFile username("skrivno.txt");
if(!username.open(QIODevice::Append))
QMessageBox::information(0,"Error",username.errorString());
QTextStream u1(&username);
username.open(QIODevice::Append | QFile::Text);
u1 << ui->lineEdit_3->text()+"|"; //code
u1 << ui->lineEdit_4->text()+"|"; //name and surname
u1 << ui->lineEdit_5->text()+'\n'; //password
username.close();
}
我的计划是从这个函数调用文本:
void MainWindow::on_pushButton_3_clicked()//login
{
QFile username("skrivno.txt");
if(!username.open(QIODevice::ReadOnly))
QMessageBox::information(0,"Error",username.errorString());
QTextStream u1(&username);
username.open(QIODevice::ReadOnly | QFile::Text);
QString temp;
while (!u1.atEnd()) {
temp = u1.readLine();
if((ui->lineEdit_2->text()== temp.section("|",0,0)) && (ui->lineEdit->text()== temp.section("|",2,2))){
ui->label_2->setText("Welcome: " + temp.section("|",1,1));
ui->progressBar->show();
for(int a=0;a<101;a++){
ui->progressBar->setValue(a);
}
Open_Window();
ui->progressBar->close();
ui->un1->close();
ui->un2->close();
ui->label_3->close();
player->stop();
}else{
ui->label->close();
ui->un1->show();
ui->un2->show();
ui->label_3->show();
player->stop();
}
}
username.close();
}
并且它可以读取不同用户的信息,因此它会检查用户的用户名和密码,如果是正确的用户和正确的密码,就让他打开下面的东西。
这是只测试文件 skrivno.txt 第一行的代码
if((ui->lineEdit_2->text()== temp.section("|",0,0)) && (ui->lineEdit->text()== temp.section("|",2,2)))
现在我需要帮助,所以它不仅在文本中写入 ID,而且检查所有用户及其密码是否正确,而不仅仅是文件中的第一个。
我的代码有效。我需要帮助改进代码:
- 在文本文件中添加ID(不知道怎么加1 有人注册新用户的时间。
- 检查每个用户及其密码(不仅是第一个)
类似这样的:
void registracija::write() {
QFile username("skrivno.txt");
if(!username.open(QIODevice::Append))
QMessageBox::information(0,"Error",username.errorString());
QTextStream u1(&username);
username.open(QIODevice::Append | QFile::Text);
u1 << SOMEHOW ADD THE ID IN HERE AND ALWAYS ADD IT +1 // <= help needed
u1 << ui->lineEdit_3->text()+"|"; //code
u1 << ui->lineEdit_4->text()+"|"; //name and surname
u1 << ui->lineEdit_5->text()+'\n'; //password
username.close();
}
【问题讨论】:
-
我想从一个文本文件中读取(这是我想象的链接 - prntscr.com/as94mm),然后测试正在登录的用户是否在文本文件中并测试是否他有正确的密码,就像上面的代码一样
-
我会重新考虑这种方法。每行代表一个用户,所以我会从中创建一个类用户。并且您可以读取所有用户并将它们保存在列表或地图中,甚至更好的是可以处理用户的类。您现在执行此操作的方式可能会导致使用相同的用户名进行注册。周围的 Class 还可以记住用户拥有的最高 ID,如果添加新用户,将其递增 1 不会有问题。