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 de fopen avec vista


Sujet :

C++

  1. #1
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut Problème de fopen avec vista
    Bonjour à tous !

    Mon code doit ouvrir un fichier et y inscrire de mutltiples informations. Tout se passe bien sous differents XP mais sous vista le programme crash sans aucune descriptions du problème...
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char szthis[300];
    char* c = szthis + GetModuleFileName(0, szthis, 300);
    while(*c != '\\') c--;
    *c = 0;
    sprintf(fileName, "%s\\%s.gps", szthis, ucName);
    FILE* fichierRetour = NULL;
    fichierRetour = fopen(fileName, "w");
    Merci pour votre aide !
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 107
    Points : 122
    Points
    122
    Par défaut
    Tu es en train de faire du C et non du C++.

    T'as fait un bout de code fonctionnel, minimal qui génère ce crash ? Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char szthis[300] = "monModule";
    char* c = szthis + strlen(szthis);
    while(*c != '\\') c--;
    *c = 0;
    sprintf(fileName, "%s\\%s.gps", szthis, ucName);
    FILE* fichierRetour = NULL;
    fichierRetour = fopen(fileName, "w");

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Verbalinsurection Voir le message
    Bonjour à tous !

    Mon code doit ouvrir un fichier et y inscrire de mutltiples informations. Tout se passe bien sous differents XP mais sous vista le programme crash sans aucune descriptions du problème...
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char szthis[300];
    char* c = szthis + GetModuleFileName(0, szthis, 300);
    while(*c != '\\') c--;
    *c = 0;
    sprintf(fileName, "%s\\%s.gps", szthis, ucName);
    FILE* fichierRetour = NULL;
    fichierRetour = fopen(fileName, "w");
    Merci pour votre aide !
    Bonjour, il plante ou?
    je ne suis pas sur que 300 soit suffisant.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 107
    Points : 122
    Points
    122
    Par défaut
    Bon pas de réponse ... sniff ...
    allez, j'avais donné un conseil pour faire des tests clairs et des réponses rapides (faire un snipped code) mais également une suggestion pour le bug :
    la boucle while n'est pas réellement bornée ...

    Ciao.

  5. #5
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut
    le code ne plante qu'au moment du fopen, je fais afficher le fileName et il est OK.
    De plus, le prog ne beug que sous vista et uniquement sous vista...
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 107
    Points : 122
    Points
    122
    Par défaut
    Soyons logiques : fopen n'est pas buggé (c'est plus que fortement probable) donc c'est dans ton code.
    As-tu fabriqué un petit code comme celui que j'ai placé et constaté que cela plantait ?

    Ton application est-elle multi-thread ? Auquel cas cela peut venir d'ailleurs.
    Tu as pu méchamment salopé la mémoire et cela plante là comme cela pourrait planter ailleurs ; as-tu inséré des instructions avant ce fopen maudit ?

  7. #7
    Membre averti Avatar de Kujara
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 262
    Points : 358
    Points
    358
    Par défaut
    Bon, hypothèse que j'ai eu l'occasion de tester moi même : vista a la très sale habitude de bloquer l'ecriture sur le disque dur si tu n'a pas les droits.

    En soit, c'est bien.

    Par contre, il ne préviens pas du tout, et ça c'est moins bien ....

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Euh...
    Ce n'est pas Vista, ça: Windows XP le fait aussi, si tu n'as pas la mauvaise idée de tourner en Administrateur en permanence...

    Et je ne vois pas en quoi il peut prévenir plus qu'en faisant échouer fopen() avec l'erreur EACCESS...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut
    Mon application n'est pas multithread, j'ai essayé un bout de code tout simple avec un fopen() et ça plante toujour...
    J'ai tester d'ecuter le code à partir d'une clef usb, d'un disque local, du reseau.... toujours pareil et à la boite on a plusieurs sortent de pc, j'ai pus tester sur 10 postes, un suel beug, le vista...
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu devrais commencer par afficher le nom du fichier que tu cherches à ouvrir.
    Au moins, tu verras si la construction du chemin a buggué ou non (GetModuleFileName() etc.)

    Et profites-en pour consulter errno, GetLastError(), etc.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 107
    Points : 122
    Points
    122
    Par défaut
    Tu peux montrer ton petit bout de code ? (ainsi des utilisateurs Vista pourront le tester, et il est plus facile de lire le code aussi :-))

    BAD ->Le code de retour du fopen c'est quoi ? <- BAD
    Oups frappe trop rapide :-) le pointeur retourné pr le fopen est bien non nul ?

  12. #12
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Si le problème persiste essayer avec l'API CreateFile et non fopen...
    Quel est l'outil de développement ?
    Sous VC++7, VC++2005 fopen est déclaré "deprecated" c.a.d. obsolète mais toujours utilisable pour compatibilité....

    ( <troll> peut-être un moyen de l'éditeur pour rendre le C/C++ encore moins standard </troll> )

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Mat.M : Ce n'est pas un troll, je pense que c'est la vérité. Et moi qui ai pourtant l'habitude de bosser sur des plate-formes MS, je désapprouve totalement ce choix bassement commercial (surtout que ça peut paraître logique avec strcpy_s(), mais surement pas avec leur *%*$^ù de fopen_s() et leur refus du C99).

    Résultat, je bosse systématiquement avec #define _CRT_SECURE_NO_DEPRECATE...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Tu as raison Medinoc mais ta réponse vient de faire tilt: fopen n'est peut-être pas supportée sous Vista parce qu'elle n'est pas safe ou sécuritaire.
    C'est à dire que tu peux lire dans un tampon mémoire un certain nombre d'octets et faire exploser ce tampon mémoire..et coller un virus sur le système.
    C'est peut-êtrepour cela que Vista ne le permet pas , je dis bien peut-être

  15. #15
    Membre averti Avatar de Kujara
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 262
    Points : 358
    Points
    358
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Tu as raison Medinoc mais ta réponse vient de faire tilt: fopen n'est peut-être pas supportée sous Vista parce qu'elle n'est pas safe ou sécuritaire.
    C'est à dire que tu peux lire dans un tampon mémoire un certain nombre d'octets et faire exploser ce tampon mémoire..et coller un virus sur le système.
    C'est peut-êtrepour cela que Vista ne le permet pas , je dis bien peut-être
    Je viens de verifier, j'ai des fopen dans mon code qui marche sous vista.
    Donc ta théorie est fausse

    Je persiste a croite que c'est un problème de droits en ecriture.

  16. #16
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut
    Ok, ça marche avec <fstream> ... Ca fait du bien...
    Mais maintenant autre problème, toujours et uniquement sous vista, il plante à cet endroit :
    Code : C++ - Afficher / masquer les numéros de ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    string NomPc;
    HKEY hkKey;
    HKEY hkKeyOpened;
    char *subKeyRet;
    cout << 2 << endl;
    subKeyRet = new char;
    cout << 3 << endl;
    DWORD dwName = 2048 * sizeof(TCHAR);
    cout << 4 << endl;
    int xSubKey = 0;
    int xSubKeyReal = 0;
    char *testConst;
    char *testConst2;

    il bloque a la ligne 6 : .... Incompréhensible...
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  17. #17
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Cela peut être lié à une erreur de corruption du tas.
    Peux-tu le tester dans le debugger sur le poste sous Vista ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut
    Je dev sous code::blocks et non je peux pas l'executer en debugger sous vista...snif...commence à me gonfler le vista là... la preuve hier soir j'ai reformaté mon pc perso pour le repasser sous xp... regressions quand tu nous tiens...
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  19. #19
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Regarde si tu n'as pas un débordement de buffer AVANT ce code.

    Et tu aurais dû faire ce que j'avais dit pour fopen() : Afficher le nom de fichier passé à fopen(), et vérifier le code d'erreur (dans le cas de fopen(), c'est errno)...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  20. #20
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut
    pour fopen() j'afficahis bien le nom du fichier, c'était le bon et en plus il fonctionnait sour xp, mais même sous vista la variable que je passais en parametre pour le nom de fichier avait la bonne valeur. Aucun code retour de la fonction puisque windows crash directement sur cette fonction... Un debordement de buffer....eu...je debute moi hein...un petit coup de pouce?
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Problème au lancement avec Vista
    Par directs dans le forum Langage
    Réponses: 1
    Dernier message: 13/09/2008, 12h21
  2. problème de souris avec vista
    Par niro75 dans le forum Windows Vista
    Réponses: 0
    Dernier message: 19/10/2007, 12h02
  3. Problème de boot avec vista
    Par Link61 dans le forum Windows Vista
    Réponses: 4
    Dernier message: 03/08/2007, 13h52
  4. Problème apparence avec Vista
    Par KryGonyT dans le forum Windows Vista
    Réponses: 2
    Dernier message: 14/04/2007, 02h09
  5. Problème graphique avec vista
    Par ibreak dans le forum Windows Vista
    Réponses: 7
    Dernier message: 21/12/2006, 20h26

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