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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| void lecture_repertoire(std::vector <string> list, std::string adresse, repertoire *repertoire) {
std::vector<std::string> files;
struct dirent* entry;
DIR* dir = NULL;
// Ouverture du dossier à l'adresse spécifiée
dir = opendir(adresse.c_str());
if (dir == NULL)
{
// Si le dossier n'existe pas, alors le programme renvoie "j" adresses construites avec le vecteur "list"
for (int j = 0; j < list.size(); j++) {
std::string file_name(adresse + list[j] + "_1" + ".txt");
repertoire->adresse[j] = file_name;
}
}
else {
// Si le dossier existe alors le programme construit un vecteur d'adresses "files" lues dans le dossier
while ((entry = readdir(dir)) != NULL)
{
if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0 && strcmp(entry->d_name, "Old") != 0) { files.push_back(entry->d_name); }
// Crash par moment ici
}
closedir(dir);
// Le programme construit ensuite "j" adresses dans répertoire avec le vecteur d'adresse et la list ; il veille à ce que les adresses soient la dernière version (à partir du compteur)
for (int j = 0; j < list.size(); j++) {
repertoire->compteur[j] = 1;
std::string tmp;
for (int i = 0;i < files.size();i++) {
std::string name1;
std::string name2;
std::size_t ext_pos;
int str2;
name1 = files[i];
name2 = files[i];
// name1 et name2 sont les adresses de files et sont découpées pour isoler le compteur/version du fichier et le nom
ext_pos = name1.find_last_of('_');
name1 = files[i].substr(0, ext_pos);
name2 = files[i].substr(ext_pos + 1);
ext_pos = name1.find_last_of('/');
name1 = name1.substr(ext_pos + 1);
ext_pos = name2.find_last_of('.');
name2 = name2.substr(0, ext_pos);
sscanf_s(name2.c_str(), "%i", &str2);
if (name1 == list[j] && str2 > repertoire->compteur[j]) repertoire->compteur[j] = str2; // On note la dernière version/compteur du fichier
}
tmp = std::to_string(repertoire->compteur[j]);
std::string temp = list[j];
std::string file_name(adresse + temp + "_" + tmp + ".txt");
// Crash ici
repertoire->adresse[j] = file_name;
// On construit "j" adresses dans répertoire à la dernière version
}
}
files.clear();
} |