IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème et AVC : _wfopen_s


Sujet :

C++

  1. #481
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 029
    Points : 12 041
    Points
    12 041
    Par défaut
    Entre la version "Février 8" et "Février 10" de https://github.com/laurentbouleau/Exemple, vous avez corriger le problème du namespace à spécifier pour les classes comme "directory_iterator", etc...
    Vous avez décidé d'ajouter "std::filesystem::" devant, systématiquement, c'est OK.

    Visual Studio est un IDE "moderne", il donne des clés pour corriger des problèmes :
    Quand VS indique une erreur, il affiche une petite "ampoule" qui, si vous cliquez dessus et sélectionnez "Afficher les corrections éventuelles", liste un certain nombre de "solution" au problème.
    Pièce jointe 650574

    Dans l'image précédente, VS vous suggère 2 solutions :
    - "Remplacer 'directory_iterator par 'std::filesystem::directory_iterator'"
    - "Ajouter 'using namespace std::filesystem'"

    Je ne sais pas si vous avez utilisé cette fonctionnalité ou vous avez corrigé "à la main", mais pensez à regarder les suggestions de VS en cas d'erreur de compilation.
    Vous avez appliqué la première suggestion mais la second peut aussi être utile.

    Moi je vous conseille, dans le cadre de votre projet "Exemple" de définir un alias de namespace en haut de votre fichier .cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    namespace fs = std::filesystem;
    Comme ça, au lieu de spécifier tout le namespace "std::filesystem::", vous n'avez qu'à écrire "fs::" à la place.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    saison.affichier_sous_Dossier(nomSousDossier);
    ???
    je ne comprends pas pourquoi une saison aurait besoin de pouvoir "afficher" un sous répertoire.

    Votre "style" de programmation s'améliore grandement (utilisation d'auto, des ranged-loop, etc...) mais je pense que la "conception objet" manque un peu de "maitrise". Mais c'est clairement pas ce qu'il y a de plus simple et évident, je pense.

    Un objet, comme votre "saison", ne devrait disposer que de fonctions qui ont un "sens" pour une saison (année, ordre dans la série, etc...)

    Le plus "logique", c'est de donner la racine au constructeur de l'objet "serie", dans le constructeur de "Serie", on scanne les répertoires contenus dans la racine, et en fonction de leur nom, de leur contenu, ou autre, on crée des objets "saison" correspondants.

    Je parle de ça parce que je ne comprends pas "la question" de votre message de 'Hier, 22h24'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    t = entry.path().wstring();
    pos = t.find_last_of(L"\\");
    pos++;
    t = t.substr(pos);
    C'est le genre de code que l'utilisation de la classe "std::filesystem::path" devrait simplifier/supprimer. Pensez à regarder toutes les fonctionnalités qu'offre ce type de classe.
    https://en.cppreference.com/w/cpp/filesystem/path
    En particulier :
    https://en.cppreference.com/w/cpp/fi.../path/filename (qui porte assez mal son nom)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                for (const auto& entry2 : std::filesystem::directory_iterator( ??? )))
    Je ne sais pas trop ce que vous cherchez à faire.
    Si votre arborescence de fichier correspond à votre arborescence d'objet supposé (une série contient des saisons, qui contient des épisodes) :
    Vous donnez la racine au constructeur de "Serie" qui regarde les fichiers et répertoires contenus dans le système de fichier, il (le constructeur de "Serie") en déduit les objet "Saison" à créer, fournit au constructeur de "Saison" un chemin vers le répertoire contenant les informations de la saison, le constructeur de "Saison" fait un peu le même travail que celui de "Serie" mais il initialise les informations de la saison et appel les constructeur d'"Episode".

    Attention : changez le contenu de "Exemple.txt", vous avez mis
    you /t s "e:\\Séries.[]\\Better Call Saul.[2015-2022]"
    Ce qui n'a aucun sens au vue de comment vous vous en servez dans votre code.
    Il faudrait plutôt y mettre :
    ./
    Si vous ne faites pas cela, le code explose à l'exécution car votre code ne gère pas le fait que le répertoire "racine", contenu dans "Exemple.txt", n'existe pas.

    ligne 1326 de votre Exemple.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (const auto& entry : std::filesystem::directory_iterator(serie.getFileName()))
    Ca n'a aucun sens et ça n'explose pas juste parce que j'ai mis "./" dans "Exemple.txt" pour que cela ne plante pas à l'exécution.

    Vous créé une variable de nom "entry" en ligne 1306, puis une autre ligne 1326.
    C'est casse-gueule d'utiliser des variables avec le même nom, surtout que le code de la ligne 1326 "correct", si on ne change pas le nom de ces variables, ça serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (const auto& entry : std::filesystem::directory_iterator(entry))
    Le compilateur y retrouverait peut-être ces petits, mais vous, en tant que programmeur, vous allez plus rien comprendre.
    Je vous conseille donc de nommer plus "correctement" ces variables, par exemple :
    ligne 1306 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for (const auto& entry_serie : std::filesystem::directory_iterator((serie.getRacine())))
    (Utilisez la fonctionnalité de "Renommage" des noms de variable dans Visual Studio qui est accessible depuis le menu contextuel (clic droit) quand le nom de la variable est sélectionné dans l'éditeur.)
    ligne 1326 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (const auto& entry_saison : std::filesystem::directory_iterator(entry_serie))
    (Utilisation de la fonctionnalité "Renommage" ici aussi pour passer de "entry" à "entry_saison")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (const auto& entry2 : std::filesystem::directory_iterator( ??? )))
                {
    Bizarrement, quand vous posiez la question sur comment lire le contenu des sous-répertoire ("serie.getFileName()" n'est donc clairement pas la solution), vous aviez pris la peine d'utiliser des noms de variables différents.

    Après, le code dans la boucle ligne 1326 à 1350 n'a pas beaucoup de sens non plus.

    Vous pouvez toujours essayer de faire le travail de manière itérative (sans utiliser la conception objet), mais alors, je pense que vous ne devriez pas utiliser de classe ou ne vous en servir que comme des structures en C (sans fonctions associées aux classes).

    Si vous poussez la logique "objet" à fond, vous devriez avoir un code proche de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Serie serie(racine);
    serie.afficher();
    Toute la logique de lecture des informations et de construction des objets "Saison" et "Episode" seraient encapsulées dans le constructeur de la classe "Serie".

  2. #482
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 331
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Fatigué !!!
    Mais bon, tant pis !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    t = entry.path().wstring();
    pos = t.find_last_of(L"\\");
    pos++;
    t = t.substr(pos);
    Je ne compris pas !!!
    C'est le genre de code que l'utilisation de la classe "std::filesystem::path" devrait simplifier/supprimer. Pensez à regarder toutes les fonctionnalités qu'offre ce type de classe.
    https://en.cppreference.com/w/cpp/filesystem/path
    En particulier :
    https://en.cppreference.com/w/cpp/fi.../path/filename (qui porte assez mal son nom)
    Oui, c'est vrai !!! (en 2023 ! Mais, j'ai oublié !)

    Attention : changez le contenu de "Exemple.txt", vous avez mis
    you /t s "e:\\Séries.[]\\Better Call Saul.[2015-2022]"
    Ce qui n'a aucun sens au vue de comment vous vous en servez dans votre code.
    Il faudrait plutôt y mettre
    Pas compris !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (const auto& entry : std::filesystem::directory_iterator(serie.getFileName()))
    Ben non !!!
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (const auto& entry_saison : std::filesystem::directory_iterator(entry_serie))
    Crevé !!!

    Mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const std::vector<std::wstring> lire_fichierTxt_V(std::wstring const& nomFichier, std::vector<std::wstring> separeteurs)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Saison::afficher_Titres(std::wstring const& nomFichier)
    Pas compris !!!

    Merci vraiment

  3. #483
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 331
    Points : 0
    Points
    0
    Par défaut
    C'est dure les chiffres !!!

  4. #484
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 029
    Points : 12 041
    Points
    12 041
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    t = entry.path().wstring();
    pos = t.find_last_of(L"\\");
    pos++;
    t = t.substr(pos);
    Je ne compris pas !!!
    Comparez avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    t = entry_serie.path().wstring();
    pos = t.find_last_of(L"\\");
    pos++;
    t = t.substr(pos);
    auto const& nomDossier = t;
     
     
    auto const& test = entry_serie.path().filename();
    C'est quoi la différence entre le contenu de la variable "nomDossier" et de la variable "test" ?
    (A part le fait que "nomDossier" est une stf::wstring (une chaine de caractère "simple") et que "test" soit un "std::filesystem::path", ce qui est encore mieux car plus spécifique.)

    Attention : changez le contenu de "Exemple.txt", vous avez mis
    you /t s "e:\\Séries.[]\\Better Call Saul.[2015-2022]"
    Ce qui n'a aucun sens au vue de comment vous vous en servez dans votre code.
    Il faudrait plutôt y mettre
    Pas compris !!!
    Vous avez quoi dans le fichier "Exemple.txt" sur votre machine ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (const auto& entry : std::filesystem::directory_iterator(serie.getFileName()))
    Ben non !!!
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (const auto& entry_saison : std::filesystem::directory_iterator(entry_serie))
    Crevé !!!
    Vous avez fait la modification entre la version "Février 10" et "Février 12", mais vous l'avez comprise, la différence entre les 2 ?

    Mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const std::vector<std::wstring> lire_fichierTxt_V(std::wstring const& nomFichier, std::vector<std::wstring> separeteurs)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Saison::afficher_Titres(std::wstring const& nomFichier)
    Pas compris !!!
    C'est un peu ce que je vous "reproche" gentiment depuis le début, vous prenez pas trop la peine de correctement nommer vos variables et noms de fonction.
    C'est aussi un peu parce que votre code est "anarchique" (faire plein de chose à la fois) que ce nommage n'est pas facile.
    On va donc espérer que ces fonctions font principalement ce que leur nom suggère.

    "Saison::afficher_Titres" appelle "lire_fichierTxt_V", on a donc besoin de lire le contenu d'un fichier pour afficher des titre, ok, c'est pas comme ça que je pense "logiquement" la chose, mais soit.

    Quand je teste le programme, j'ai bien un truc qui déconne dans "lire_fichierTxt_V", mais parce qu'on lui donne de mauvais paramètres.
    On lui donne en paramètre que le nom du fichier, or le code ligne 80 à 84 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ifstream fichier{ nomFichier };
    if (!fichier)
    {
        throw std::runtime_error("Fichier impossible à ouvrir.");
    }
    ne fonctionne que si on lui donne le chemin vers le fichier, pas juste son nom.
    Donc, le nom du paramètre "nomFichier" est foireux, "chemin" ou "filepath" serait plus explicite.

    Le problème remonte à la ligne 1362 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    saison.affichier_Fichier(t2);
    Vous ne devriez pas passer la chaine de caractère contenue dans la variable "t2" mais la variable "entry_saison" pour avoir le chemin vers le fichier et non juste le nom du fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    saison.affichier_Fichier(entry_saison);
    Vous devrez changer le type des paramètres des fonctions appelées en "std::filesystem.path" à la palce des std::wstring (et changer le nom du paramètre pour qu'il corresponde à son sens : "chemin" par exemple)
    Vous devez aussi un peu changer le code de ces fonctions pour qu'elles gèrent des chemins vers des fichier et pas juste des noms de fichier.

  5. #485
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 331
    Points : 0
    Points
    0
    Par défaut
    Vous avez quoi dans le fichier "Exemple.txt" sur votre machine ?
    Exemple.txt
    e:\Séries.[]\

  6. #486
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 331
    Points : 0
    Points
    0
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void Saison::affichier_Dossier(fs::path const& nomDossier)
    {
    ...
    }
    Oui, c'est vrai !!! Merci vraiment

  7. #487
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 029
    Points : 12 041
    Points
    12 041
    Par défaut
    Exemple.txt
    Depuis La version "Févier 4" du dépôt Git, Exemple.txt contient :
    you /t s "e:\\Séries.[]\\Better Call Saul.[2015-2022]"
    Et c'est même avec cette version que ces horribles "\\" ont été ajoutés.

    Votre contenu de Exemple.txt est bien plus correct car il contient le chemin d'un répertoire et pas une commande.

    Il faudrait que le contenu du dépôt Git soit le même que sur votre machine.
    Mais votre chemin "e:\Séries.[]\" est peut-être valide sur votre machine mais je vous conseille de le remplacer par un chemin qui serait valide pour n'importe quelle personne qui télécharge votre dépôt Git.
    En mettant "./" à la place de "e:\Séries.[]\" dans le fichier Exemple.txt, le chemin sera relatif au "working directory" et donc on (ceux qui on télécharger le dépôt Git) pourra utiliser le répertoire "Better Call Saul.[2015-2022]" et son contenu qui sont dans le dépôt.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Saison::affichier_Dossier(fs::path const& nomDossier)
    Ok pour le type du paramètre mais je changerais aussi le nom du paramètre en "cheminDossier" car vous ne passez plus le nom du fichier mais son chemin.
    Et vous avez fait plusieurs fois la faute de frappe "affichier" à la place "afficher".

    Le changement de type devrait induire quelque modification dans le code des fonctions, mais si vous utilisez "correctement" les fonctions de la classe "std::filesystem::path", le code sera grandement simplifié.

  8. #488
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 331
    Points : 0
    Points
    0
    Par défaut
    Bonjour,
    Et c'est même avec cette version que ces horribles "\\" ont été ajoutés.

    Votre contenu de Exemple.txt est bien plus correct car il contient le chemin d'un répertoire et pas une commande.

    Il faudrait que le contenu du dépôt Git soit le même que sur votre machine.
    Mais votre chemin "e:\Séries.[]\" est peut-être valide sur votre machine mais je vous conseille de le remplacer par un chemin qui serait valide pour n'importe quelle personne qui télécharge votre dépôt Git.
    En mettant "./" à la place de "e:\Séries.[]\" dans le fichier Exemple.txt, le chemin sera relatif au "working directory" et donc on (ceux qui on télécharger le dépôt Git) pourra utiliser le répertoire "Better Call Saul.[2015-2022]" et son contenu qui sont dans le dépôt.
    Ok !

  9. #489
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 331
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Ok !
    Mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    void Saison::afficher_Episodes(fs::path const& nomFichier)
    {
        auto nf = fs::path(nomFichier).wstring();
        assert(nf.length() > 0 && L"Nom de fichier vide");
    
        std::wcout << L"nf=" << nf << std::endl;
    
        std::size_t pos;
        pos = nf.find_last_of(L"\\");
        pos++;
        std::wstring wstr = nf.substr(pos);
    
        episodes.first = std::stoi(wstr, &pos);
        std::wcout << L"episodes.first=[" << episodes.first << L']' << std::endl;
    
        std::wcout << L"ddd [" << fs::current_path() << L']' << std::endl;
        try
        {
            wstr = lire_fichierTxt( ??? ); // NonFichier ???
        }
        catch (runtime_error const& exception)
        {
            std::wcout << L"Erreur : " << exception.what() << std::endl;
        }
    
        //assert((e_filename == createdBy_filename) && L"Erreur !!! Episodes... !");
        episodes.second = wstr;
        assert((episodes.second.size() != 0));
        std::wcout << L"episodes.first=[" << episodes.first << L"], episodes.second=[" << episodes.second << L']' << std::endl;
    }
    Pas trouvé ! Fatigué !!!

    https://github.com/laurentbouleau/Exemple

    Merci d'avance

  10. #490
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 029
    Points : 12 041
    Points
    12 041
    Par défaut
    Le problème est toujours en amont.
    Vous ne devez pas confondre nom de fichier / répertoire.
    Vous voulez absolument afficher les noms des fichiers/répertoires dans la console, soit, mais pour pouvoir lire le contenu d'un répertoire ou d'un fichier, il vous faut le chemin complet et pas juste son nom.

    Donc, ligne 1165 d'exemple.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     saison.afficher_Episodes(nomFichier);
    Faut la remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    saison.afficher_Episodes(entry_saison);
    Puis ligne 734
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wstr = lire_fichierTxt(std::wstring(nomFichier.parent_path()));
    Pourquoi "parent_path" ???
    "nomFichier" qui porte mal son, car c'est un chemin, pas un nom.
    "parent_path" permet d'avoir le chemin vers le répertoire "parent" contenant "nomFichier", que cherchez-vous à lire dans ce répertoire parent ??.

    Je pense que c'est plutôt la ligne suivante qu'il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wstr = lire_fichierTxt(std::wstring(nomFichier));
    Pensez à renommer le nom de vos paramètres et variable locale pour qu'ils correspondent à leur usage actuel (ex "nomFichier" à remplacer par "cheminFichier").

  11. #491
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 331
    Points : 0
    Points
    0
    Par défaut
    Pensez à renommer le nom de vos paramètres et variable locale pour qu'ils correspondent à leur usage actuel (ex "nomFichier" à remplacer par "cheminFichier").
    Ok !

    Merci beaucoup

  12. #492
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 331
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Ok !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    ...
        for (const auto& entry_serie : fs::directory_iterator((serie.getRacine())))
        {
    ...
            if (fs::is_directory(entry_serie))
            {
                auto const& nomDossier = entry_serie.path().filename();
    ...
                for (const auto& entry_saison : fs::directory_iterator(entry_serie))
                {
                    auto const& nomFichier = entry_saison.path().filename();
    ...
                std::wcout << std::endl;
                std::wcout << std::endl;
                std::wcout << L"saison :" << std::endl;
                saisons.push_back(saison); // Erreur ! Pas compris !!!
                std::wcout << L"saison ok !!!" << std::endl;
            }
        }
    Erreur ! Pas compris !!!

    Merci d'avance

  13. #493
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 029
    Points : 12 041
    Points
    12 041
    Par défaut
    C'est pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    serie.saisons.push_back(saison);

  14. #494
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 331
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
        Serie serie(racine);
        std::wcout << L"serie.racine=[" << serie.getRacine() << L"]" << std::endl;
        //system("PAUSE");
        std::wcout << L"directory_iterator :" << std::endl;
        for (const auto& entry_serie : fs::directory_iterator((serie.getRacine())))
        {
            std::wcout << L"[" << entry_serie << L']' << std::endl;
            if (entry_serie.is_regular_file())
            {
                std::wcout << L"===> is_regular_file(1)=[" << entry_serie << L']' << std::endl;
                std::wcout << std::endl;
                continue;
            }
            if (fs::is_directory(entry_serie))
            {
                Saison saison;
                auto const& nomDossier = entry_serie.path().filename();
                saison.afficher_Dossier(nomDossier);
                for (const auto& entry_saison : fs::directory_iterator(entry_serie))
                {
                    auto const& nomFichier = entry_saison.path().filename();
                    std::wcout << L"nomFichier=[" << nomFichier << L']' << std::endl;
                    if (entry_saison.is_regular_file() && saison.episode == 0) 
                    {
                        saison.afficher_Episodes(entry_saison);
                        saison.episode = 1;
                        std::wcout << L"Episodes ok !!!" << std::endl;
                        //system("PAUSE");
                        std::wcout << std::endl;
                        break;
                    }
                    if (saison.episode == 0)
                    {
                        std::wcout << L"Pas d'episodes !!!" << std::endl;
                        exit(1);
                    }
                }
                for (const auto& entry_saison : fs::directory_iterator(entry_serie))
                {
                    if (entry_saison.is_regular_file())
                    {
                        std::wcout << L"===> is_regular_file(2)=[" << entry_saison << L']' << std::endl;
                        saison.afficher_Fichier(entry_saison);
                    }
                }
                std::wcout << std::endl;
                std::wcout << std::endl;
                std::wcout << L"saison :" << std::endl;
                auto s = saison.titres.size(); //to get the size of the vector
                std::tm j;
                for (auto i = 0; i < s; i++)
                { //to print the elements stored in vector of tuples, vec
                    std::wcout << i << std::endl;
                    std::wcout << L"__x    =" << get<0>(saison.titres[i]) << std::endl;
                    std::wcout << L"__t1   =[" << get<1>(saison.titres[i]) << L"]" << std::endl;
                    std::wcout << L"__t2   =[" << get<2>(saison.titres[i]) << L"]" << std::endl;
                    std::wcout << L"__t3   =[" << get<3>(saison.titres[i]) << L"]" << std::endl;
                    j = get<4>(saison.titres[i]);
                    std::wcout << L"__temps=[" << j.tm_hour * 1 + j.tm_min << L"]" << std::endl;
                    std::wcout << L"__p    =[" << get<5>(saison.titres[i]) << L"]" << std::endl;
                }
                serie.saisons.push_back(saison);
                saison.~saison();
                std::wcout << L"saison ok !!!" << std::endl;
            }
        }
        std::wcout << L"Ok !!!" << std::endl;
    Ok ou pas ?

    Après void Serie::PrintDate_ou_Dates() !

    Merci beaucoup

  15. #495
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 331
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    https://github.com/laurentbouleau/Exemple : Février 17

    Exemple.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class Saison
    {
    public:
        Saison(void);
        ~Saison();
        void afficher_Dossier(std::filesystem::path const& nomDossier);
        void afficher_Fichier(std::filesystem::path const& nomFichier);
        void afficher_Avec(std::filesystem::path const& nomFichier);
        void afficher_Date_ou_Dates(std::filesystem::path const& nomFichier);
        void afficher_Titres(std::filesystem::path const& nomFichier);
        void afficher_Episodes(std::filesystem::path const& nomFichier);
        //                               x          t1            t2           t3           temps      p
        std::vector<std::tuple<unsigned int, std::wstring, std::wstring, std::wstring, std::tm, std::wstring>> titres;
        unsigned short int episode{ 0 };
     
    private:
        std::pair<std::tm, std::wstring>dossier;
        std::pair<unsigned short int, std::wstring>episodes;
        std::vector<std::pair<std::wstring, std::wstring>> avec;
        std::vector<std::tuple<unsigned int, std::vector<DateRecord>, std::wstring>>date_ou_dates;
        std::vector<std::wstring> image;
    };
    et Exemple.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const void afficher_Avec(fs::path const& nomFichier)
    {
        //assert((a_filename == createdBy_filename) && L"Erreur !!! Avec... !");
        auto nf = fs::path(nomFichier).wstring();
        std::wcout << L"nf=" << nf << std::endl;
        assert(nf.length() > 0 && L"Nom de fichier vide");
        avec = lire_paireCleValeur_depuisFichierTxt(nf, L" : ");
        assert((avec.size() != 0));
    }
    Pourquoi​​​ ???

    Merci d'avance

  16. #496
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 029
    Points : 12 041
    Points
    12 041
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    avec = lire_paireCleValeur_depuisFichierTxt(nf, L" : ");
    Manque le type de la variable "avec".
    Au pire, le "type" "auto" fera l'affaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    auto avec = lire_paireCleValeur_depuisFichierTxt(nf, L" : ");
    Après, la définition de votre fonction "afficher_Avec", membre de la classe Saison :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const void afficher_Avec(fs::path const& nomFichier)
    Elle colle pas à sa déclaration dans le .h:
    Essayez plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Saison::afficher_Avec(fs::path const& nomFichier)
    P.S.: Quelle est la question dans votre message de "12/02/2024, 21h30" ?

  17. #497
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 331
    Points : 0
    Points
    0
    Par défaut
    P.S.: Quelle est la question dans votre message de "12/02/2024, 21h30" ?
    Ah ! Super ou pas

  18. #498
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 331
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    https://github.com/laurentbouleau/Exemple : Février 18

    Et (serie.cpp) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    void Saison::afficher_Fichier(fs::path const& nomFichier)
    {
        std::wcout << std::endl;
        std::wcout << std::endl;
        std::wcout << L"===== [" << nomFichier << L"] =====" << std::endl;
        std::wcout << std::endl;
        std::wcout << std::endl;
     
        auto nf = fs::path(nomFichier).wstring();
        std::wcout << L"nf=[" << nf << L']' << std::endl;
     
        auto nomImage = wstring(fs::path(nomFichier).extension());
        std::wcout << L"nomImage[" << nomImage << L']' << std::endl;
     
        auto pos = nf.find_last_of(L"\\");
        pos++;
        auto t = nf.substr(pos);
        std::wcout << L"t=[" << nf << L']' << std::endl;
     
        pos = t.length();
        auto filename = t;
        t = t.substr(0, pos - 4);
        //pos = pos - 4;
        pos -= 4;
        //entry_saison.path().filename()
        std::wcout << L"pos=" << pos << std::endl;
        if (nomImage == L".txt")
        {
            if (t == L"_you_.txt")
            {
                std::wcout << L"_you_.txt ok !!!" << std::endl;
                return;
            }
            if (!(std::isdigit(t[0])))
            {
                // Avec
                if (filename == L"Avec.txt")
                {
                    std::wcout << L"----> Avec.txt" << std::endl;
                    afficher_Avec(nomFichier);
                    return;
                }
    Je suis crevé

    Merci d'avance

  19. #499
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 331
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Marche pas !!!
    Exemple.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     ...
               for (const auto& entry_saison : fs::directory_iterator(entry_serie))
                {
                    auto const& nomFichier = entry_saison.path().filename();
                    if (entry_saison.is_regular_file() && saison.episode == 0) 
                    {
                        saison.episode = 0;
                        saison.afficher_Episodes(entry_saison);
                        saison.episode = 1;
                        break;
                    }
                }
                if (saison.episode == 0)
                {
                    std::wcout << L"Pas d'episode(s) !!!" << std::endl;
                    exit(1);
                }
                for (const auto& entry_saison : fs::directory_iterator(entry_serie))
                {
                    if (entry_saison.is_regular_file())
                    {
                        std::wcout << L"===> is_regular_file(2)=[" << entry_saison << L']' << std::endl;
                        saison.afficher_Fichier(entry_saison);
                    }
                }
    ...
    Sans L"10.txt" !!! (saison.afficher_Episodes(entry_saison); )
    Problème !!! Solution ?

    Merci d'avance

  20. #500
    Nouveau Candidat au Club Avatar de Laurent_B_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2021
    Messages
    331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2021
    Messages : 331
    Points : 0
    Points
    0
    Par défaut
    ^
    |
    |
    |
    https://github.com/laurentbouleau/Exemple : Février 19
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probléme avc la formclosing
    Par dv-2008 dans le forum VB.NET
    Réponses: 2
    Dernier message: 23/03/2008, 17h33
  2. probléme avc console.readline()
    Par dv-2008 dans le forum VB.NET
    Réponses: 7
    Dernier message: 10/03/2008, 01h33
  3. j'ai un probléme avc un code vb.net aider moi svp
    Par dv-2008 dans le forum VB.NET
    Réponses: 12
    Dernier message: 29/01/2008, 10h20
  4. Problème avc une requête
    Par Raiga dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 30/06/2007, 19h36
  5. Toujours problème de lien avce la lib Cblas
    Par Kirou dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 19/06/2007, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo