Originariamente inviato da oregon
Il controllo lo devi fare *dopo* che esegui la open.
Che senso ha fare il controllo se il programma non conosce ancora il nome del file da aprire?
Forse è questo che intendevi?
codice:
fs.open("pwd", ios::binary);
if(!fs){
fs.open("pwd", ios::out | ios::binary);
cout<< "PRIMO AVVIO\nInserire una password di massimo 10 caratteri. Affinche' essa sia difficilmente individuabile inserite numeri e caratteri maiuscoli o minuscoli." << endl;
do{
cout<< endl << "Inserire password amministratore: ";
cin>> pwd1;
cout<< "conferma password: ";
cin>> pwd2;
if(strcmp(pwd1, pwd2) != 0){cout<< endl << "Conferma password fallita. Ripetere l'inserimento" << endl << endl;}
}while(strcmp(pwd1, pwd2) != 0);
cout<< endl << "Password accettata. Conservare la password poiche' sara' impossibile recuperarla senza perdite di dati." << endl << endl;
fs.write((char*)&pwd1,sizeof(pwd1));
fs.close();
return 0;
}
else{
fs.open("pwd", ios::in | ios::binary);
fs.read((char*)&pwd1, sizeof(pwd1));
cout<< "CONTROLLO SICUREZZA"<< endl;
for(i=2; i>=0; i--){
cout<< endl << "Password Amministratore: ";
cin>> pwd2;
if(strcmp(pwd1, pwd2) != 0) cout<< endl << "Password errata. Tentativi restanti "<< i << endl;
else break;
if(i == 0) return 1;
}
return 0;
Il risultato è che crea il file pwd.txt ma quando si riavvia il programma entra sempre nell'if, come se il file non esistesse, ripetendo il primo avvio...