Ho alcuni problemi con la procedura di cancellazione di un elemento inserito nel file. Qualcuno può aiutarmi?![]()
Non capisco quali errori ci possano essere!!! Grazie a tutti!!!!
codice://Procedura per cancellare un abbonamento void CancellaProdotto() { char cFileTemp[]="tempfile.dat"; /*File temporaneo: serve per copiare tutti i dati da mantenere nel file1; verrà poi rinominato con il nome del file1*/ PointerElem1 pTemp1; //variabile puntatore per la gestione della lista1 PointerElem1 pTemp1_2; char Codicel[LCODICE]; PointerElem1 pApp1; // variabile nella quale viene ricopiata la lista1 bool bCancellato=false; //variabile che indica se è stato cancellato bool bElem=false; //se è vera vuol dire che vi era un solo elemento nella lista1 CaricaFile1(); system("CLS"); system("color C"); pApp1=pLista1; cancella(Codicel,LCODICE); cout<< "Inserisci codice prodotto: "; cin.getline(Codicel,sizeof(Codicel)); while (pApp1 != NULL) { if(ControllaListaVuota1(pLista1)) { system("cls"); system("color C"); cout<<"Non sono stati inseriti elementi!!!\n"; system("pause"); } else { if (iNRecordFile1==1) //se vie è un solo elemento nella lista { //se è uscito i dati vengono cancellati, altrimenti no if (strcmp(pLista1->DatiProdotto.codice,Codicel)==0) { bElem=true; bCancellato=true; pTemp1_2=pLista1; pLista1=pTemp1_2->pNext1; //cancella l'elemento dalla lista delete pTemp1_2; remove(cFile1); } } //se si tratta di più di un elemento nella lista if (bElem==false) { pTemp1=pLista1; pTemp1_2=pLista1->pNext1; while (pTemp1_2 !=NULL) { if (strcmp(pTemp1_2->DatiProdotto.codice,Codicel)==0) { bCancellato=true; pTemp1->pNext1=pTemp1_2->pNext1; //Cancella l'elemento dalla lista delete pTemp1_2; } pTemp1_2=pTemp1_2->pNext1; pTemp1=pTemp1->pNext1; } pTemp1=pLista1; while (pTemp1 !=NULL) { if(strcmp(pTemp1->DatiProdotto.codice,Codicel)!=0) { strcpy(Catalogo.codice,pTemp1->DatiProdotto.codice); strcpy(Catalogo.descrizione,pTemp1->DatiProdotto.descrizione); strcpy(Catalogo.minima,pTemp1->DatiProdotto.minima); strcpy(Catalogo.misura,pTemp1->DatiProdotto.misura); strcpy(Catalogo.prezzo,pTemp1->DatiProdotto.prezzo); strcpy(Catalogo.quantita,pTemp1->DatiProdotto.quantita); strcpy(Catalogo.reparto,pTemp1->DatiProdotto.reparto); /*Apro il file in modalità "ios::app": questo permette di aggiungere il record appena inserito nella lista. I dati vengono scritti nel FileTemp*/ FileOut.open(cFileTemp , ios::out | ios::binary | ios::app); if(FileOut) { //Controllo che il file sia aperto e funzionante if(FileOut.good()) { //Effettuo la scrittura del record in coda al file FileOut.write((char*) &Catalogo, sizeof(Prodotto)); } //Chiusura del file FileOut.close(); } } pTemp1=pTemp1->pNext1; } }//if pApp1=pApp1->pNext1; }//else } deleteFile(cFile1); rename(cFileTemp, cFile1); //il FileTemp viene rinominato con il nome del File1 if (iNRecordFile1!=0) { cout<<"...............Cancellazione avvenuta con successo!!!...............\n"; system("pause"); } EliminaListaMemDin1(pLista1, Catalogo); return; Menu_princ(); }

Rispondi quotando