Supprimer ligne spécifique à partir d'un fichier

J'essaie de supprimer une ligne spécifique par id à partir d'un fichier en C++ et voici mon code:

void deleteRow()
{
ifstream inDb("files/students.dat", ios::in);
if(!inDb)
{
cerr << "File could no be opened!\n";
}
cout << countRowsOfDb() << " records." << endl;
Student *studentsArray[countRowsOfDb()];
int n = 0;
while(inDb >> id >> name >> grade >> points >> type)
{
studentsArray[n] = new Student(id, name, grade, points, type);
n++;
}
inDb.close();
for(int i = 0; i < countRowsOfDb(); i++)
{
cout << studentsArray[i]->id << " " << studentsArray[i]->name << " " << studentsArray[i]->grade << " "
<< studentsArray[i]->points << " " << studentsArray[i]->type << "\n";
}
cout << "\nWhich one you would like to delete? Enter an id: ";
string term;
cin >> term;
ofstream outDb("files/students.dat", ios::out);
if(!outDb)
{
cerr << "File could no be opened!\n";
}
for(int i = 0; i < countRowsOfDb(); i++)
{
if(studentsArray[i]->id != term)
{
outDb << studentsArray[i]->id << " " << studentsArray[i]->name << " " << studentsArray[i]->grade << " "
<< studentsArray[i]->points << " " << studentsArray[i]->type << "\n";
}
}
outDb.close();
cout << "\nObject deleted!\n";
}

J'ai créer un fichier d'entrée de flux et puis obtenir toutes les lignes, faire tableau d'objets et de les afficher sur l'écran, puis demander lequel supprimer en tapant un code et quand je tape le code, je suis en train de mettre tous ces éléments de la matrice seule, sans l'élément avec le même id, mais il ne fonctionne pas, après cela, il n'y a rien dans le fichier. Des idées?

Quelles sont les valeurs de studentsArray[i]->id, et à terme sur la ligne que vous attendez pour les supprimer?
Vous avez une fuite de mémoire de ne pas deleteing chaque élément de votre groupe. Essayez std::vector.
Student *studentsArray[countRowsOfDb()]; Comment cette compilation? Ne devrait pas la taille de la matrice être une compilation constante de temps?
studentsArray[i]->id, et à terme sont des chaînes de caractères et si elles sont identiques à l'élément avec l'id sera ignorée
countRowsOfDb() est une fonction qui retourne int et il ne peut pas être constante car les lignes peuvent être supprimées ou ajoutées à tout moment.. ?

OriginalL'auteur fre2ak | 2012-06-13