Fonction de lecture/écriture des fichiers de sauvegarde
Salut!
Pour un logiciel que je suis en train de concevoir, j'aimerais disposer d'une fonction qui lirait ou écrirait dans mes fichiers de sauvegarde enregistrés au format .txt
Je crois que cette fonction ne marche pas bien. Le programme qui l'utilise a tendance à se crasher au moment de l'utiliser environ 130 fois.
Je maîtrise encore assez mal la lecture/écriture de fichiers texte... =)
Voici le code source actuel, et j'aimerais lire vos suggestions si vous en avez.
(EDIT: Nouvelle version un peu plus bas)
Sauvegarde.h:
Code:
1 2 3 4 5 6 7 8 9 10
| #ifndef SAUVEGARDE_H_INCLUDED
#define SAUVEGARDE_H_INCLUDED
#include <string.h>
using namespace std;
string Sauvegarde(int a, int b, string c);
#endif // SAUVEGARDE_H_INCLUDED |
Sauvegarde.cpp:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| #include <iostream>
#include <fstream>
#include <string.h>
#include "Sauvegarde.h"
using namespace std;
string Sauvegarde(int a, int b, string c)
{ // a est le numéro du fichier utilisé
// b est la ligne de sauvegarde utilisée
// c est le contenu à écrire ou à retourner
// Déclaration des variables
int x; // Compteur de lignes pour la lecture des fichiers
x=0; // Initialisation
char* y; // Nom du fichier à lire ou à écrire
switch(a) // Ceci permet d'orienter la fonction vers un des fichiers qui contient des données intéressantes, en-fonction des arguments donnés.
{ case 1: y="Donnees/Fichier_1.txt"; break; // Fichier 1
case 2: y="Donnees/Fichier_2.txt"; break; // Fichier 2
case 3: y="Donnees/Fichier_3.txt"; break; // Fichier 3
case 4: y="Donnees/Fichier_4.txt"; break; // Fichier 4
case 101: y="Donnees/Pacman_1.txt"; break; // Pacman 1
case 102: y="Donnees/Pacman_2.txt"; break; // Pacman 2
case 103: y="Donnees/Pacman_3.txt"; break; // Pacman 3
case 104: y="Donnees/Pacman_4.txt"; break; // Pacman 4
case 105: y="Donnees/Pacman_5.txt"; break; // Pacman 5
case 106: y="Donnees/Pacman_6.txt"; break; // Pacman 6
case 107: y="Donnees/Pacman_7.txt"; break; // Pacman 7
case 108: y="Donnees/Pacman_8.txt"; break; // Pacman 8
case 109: y="Donnees/Pacman_9.txt"; break; // Pacman 9
case 110: y="Donnees/Pacman_10.txt"; break; // Pacman 10
case 111: y="Donnees/Pacman_11.txt"; break; // Pacman 11
case 112: y="Donnees/Pacman_12.txt"; break; // Pacman 12
case 113: y="Donnees/Pacman_13.txt"; break; // Pacman 13
case 114: y="Donnees/Pacman_14.txt"; break; // Pacman 14
case 115: y="Donnees/Pacman_15.txt"; break; // Pacman 15
case 116: y="Donnees/Pacman_16.txt"; break; // Pacman 16
case 201: y="Donnees/Chargement_1.txt"; break; // Chargement 1
}
if (c == "") // Lecture seule dans la mémoire
{ ifstream fichier(y); // Ouvrir le fichier en lecture
while (x <= b)
{ getline(fichier, c);
x++;
}
fichier.close();
}
else // Ecriture dans la mémoire
{ ofstream fichier(y); // Ouvrir le fichier en écriture
fichier.close();
}
return c;
} |
Si c'est nécessaire, vous pouvez poser toutes les questions! =D
Nouvelle version de Sauvegarde()
OK, alors j'ai modifié le code et il est sûrement un peu moins instable comme ça. je vous montre:
LectureSauvegarde.h:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| #ifndef LECTURESAUVEGARDE_H_INCLUDED
#define LECTURESAUVEGARDE_H_INCLUDED
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string LectureSauvegarde(string fichier, int ligne);
#endif // LECTURESAUVEGARDE_H_INCLUDED |
LectureSauvegarde.cpp:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include "LectureSauvegarde.h"
using namespace std;
string LectureSauvegarde(string fichier, int ligne)
{ ifstream fluxEcriture(fichier, ios::in); // Ouvrir le fichier en lecture
string contenu("");
if(fluxEcriture)
{
for (int index(0); index <= ligne; index++) // Lire les lignes une-par-une
{ getline(fluxEcriture, contenu);
}
fluxEcriture.close();
}
else
{ cerr << "Impossible d'ouvrir le fichier !" << endl;
}
return contenu;
} |
Le problème, maintenant, c'est que lorsque je l'exécute, il s'interrompt sur un message d'erreur).
D'abord, une image est chargée correctement (en tout cas, il n'y a aucun message d'erreur.
Ensuite, au moment de charger la deuxième image, tout part en couilles. Voici les messages d'erreur:
Au moment d'appeler "Texture.LoadFromFile()", le message est "Failed to load image "nom (correct) de l'image". Reason : Out of memory"
Alors le programme passe outre (apparemment), et essaie de charger la suivante. Le message est alors: "terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
(double saut de ligne)
This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information."
Voilà. Vous connaissez ça?