Buongiorno a tutti,
sto cercando di capire come posso sviluppare un algoritmo per la cancellazione fisica di dati all'interno di un file.
Ho pensato di creare un secondo file in cui scrivere i dati da non cancellare e in seguito cancellare il file originario e rinominare il secondo file con il nome del primo.
Ma purtroppo quest'ultimo non funziona e non capisco cosa ho sbagliato.
Chiedo il vostro aiuto nel capire dov'è l'errore.
Grazie in anticipo.
Vi posto il codice:
#include<iostream>
#include<fstream>
#include<cstdio>
using namespace std;
#ifndef CLASSI_H
#define CLASSI_H
class classe{
private:
char nome[20];
public:
void set_nome(char *);
char *get_nome();
classe(){}
~classe(){}
};
#endif
void classe::set_nome(char *n){
strcpy(nome,n);
}
char *classe::get_nome(){
return nome;
}
fstream f;
fstream g;
const int N=2;
void caricamento();
void cancellazione();
void visualizza();
int main(){
caricamento();
cancellazione();
visualizza();
system("pause");
return 0;
}
void caricamento(){
classe c;
long pos;
char temp [20];
f.open("classe.dat",ios::out|ios::binary);
if(f.fail()==false){
for(int i=0;i<N;i++){
pos=i*sizeof(classe);
f.seekg(pos,ios::beg);
cout<<"Nome:";
cin>>temp;
c.set_nome(temp);
f.seekp(pos,ios::beg);
f.write((char*)&c,sizeof(classe));
}
f.close();
cout<<endl;
}
}
void cancellazione(){
classe c;
f.open("classe.dat",ios::in|ios::binary);
g.open("classe1.dat",ios::out|ios::binary);
for(int i=0;i<N;i++){
f.read((char*)&c,sizeof(classe));
if(!strcmp(c.get_nome(),"Michele")){
g.write((char*)&c,sizeof(classe));
}
}
f.close();
g.close();
remove("classe.dat");
rename("classe1.dat","classe.dat");
}
void visualizza(){
classe c;
f.open("classe.dat",ios::in|ios::binary);
if(f.fail()==false){
for(int i=0;i<N;i++){
f.read((char*)&c,sizeof(classe));
cout<<"Nome:"<<c.get_nome()<<endl;
}
f.close();
}
}