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++Builder Discussion :

[intermédiaire][TOpenDialog] conflit avec opendir


Sujet :

C++Builder

  1. #1
    Membre éprouvé
    Avatar de thecaptain
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Décembre 2003
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Décembre 2003
    Messages : 919
    Points : 1 210
    Points
    1 210
    Par défaut [intermédiaire][TOpenDialog] conflit avec opendir
    Salut à tous

    J'utilise un TOpenDialog sous bcb pour sélectionner un fichier. Le problème est que si l'utilisateur choisi un fichier, n'importe quel appel à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DIR* d = opendir(unDir);
    me resort 0 (il peut pas ouvrir le fichier) et fait tout planter Si je ne fait pas le opendialog->Execute(), tout fonctionne nickel. J'ai essayé d'appliquer un delete sur le opendialog après avoir récupérer le fichier mais rien à faire... pourtant la fonction opendir (dirent.h) fonctionne parfaitement si je ne fait pas le Execute... Notez aussi que si, dans la box de choix, je fait annuler, ca fonctionne parfaitement (donc pas d'erreur sur le opendir).

    Ou ai-je fait l'erreur ?

    @++
    Libzippp (C++)
    Lost in AStorm

  2. #2
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    Je n'ai pas très bien compris cette partie :

    me resort 0 (il peut pas ouvrir le fichier)
    utilises tu opendir avec un fichier ?

  3. #3
    Membre éprouvé
    Avatar de thecaptain
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Décembre 2003
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Décembre 2003
    Messages : 919
    Points : 1 210
    Points
    1 210
    Par défaut
    Salut,

    oops désolé, j'essaie d'ouvrir un dossier quelconque donc

    @++
    Libzippp (C++)
    Lost in AStorm

  4. #4
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    quel code est execute dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(OpenDialog1->Execute(){
       ???? 
    }

  5. #5
    Membre éprouvé
    Avatar de thecaptain
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Décembre 2003
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Décembre 2003
    Messages : 919
    Points : 1 210
    Points
    1 210
    Par défaut
    re,

    le code se présente comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    openDialog1->Filter = "Bitmap files (*.BMP;*.bmp)|*.BMP;*.bmp";
    openDialog1->Execute();
    TBoxURLImage->Text = openDialog1->FileName;
    J'ai essayé ensuite cette variante, sans succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TOpenDialog* tp = new TOpenDialog(this);
    tp->Filter="Bitmap files (*.BMP;*.bmp)|*.BMP;*.bmp";
    tp->Execute();
    TBoxURLImage->Text = tp->FileName;
    delete tp;
    cela viendrait du fait que je ne fait pas de if ?

    @++
    Libzippp (C++)
    Lost in AStorm

  6. #6
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    non je ne pense pas
    ...le if sert juste à ne pas continuer à executer le code quand on fait annuler...

    je dirais plutot d'un probleme avec la variable unDir qui a moment ou a un autre contient un mauvais chemin ...

    J'ai testé ton code qui ne provoque aucun retour NULL de opendir tant que unDir contient un chemin valide...

    le fait que cela arrive quand tu execute OpenDialog chez toi est un mystère...

    le seul piège causant des bugs que je connaisse avec OpenDialog c'est le changement de CurrentDir quand on fait GetCurrentDir() mais cela n'a rien avoir ...


    ..sinon il faut vérifier de bien faire des closedir après opendir , peut être que ça pourrait jouer...

  7. #7
    Membre éprouvé
    Avatar de thecaptain
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Décembre 2003
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Décembre 2003
    Messages : 919
    Points : 1 210
    Points
    1 210
    Par défaut
    re,

    merci, je vais chercher de ce coté-la. Le fait est que j'ai testé les chemis de mon opendir et que j'ai toujours le même (donc un chemin valide) et que ca me plante si j'ai fait l'execute avant

    @++
    Libzippp (C++)
    Lost in AStorm

  8. #8
    Membre éprouvé
    Avatar de thecaptain
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Décembre 2003
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Décembre 2003
    Messages : 919
    Points : 1 210
    Points
    1 210
    Par défaut
    re,

    alors j'ai avancé un peu En fait, je cible toujours un fichier relativement (donc '.') et force est de constater que.... le chemin relatif change dans le répertoire ou j'ai sélectionné mon fichier
    J'explique mon appli est dans c:\Temp\MonAppli, donc lorsque je cible '.', je retombe bien dans ce dossier ! Maintenant je choisi un fichier se trouvant dans c:\AutreFichier\truc.bmp, la cible '.' se trouve dans c:\AutreFichier\ donc évidemment il ne me trouve pas les dossiers désirés

    Une explication ???

    @++
    Libzippp (C++)
    Lost in AStorm

  9. #9
    Membre éprouvé
    Avatar de thecaptain
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Décembre 2003
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Décembre 2003
    Messages : 919
    Points : 1 210
    Points
    1 210
    Par défaut
    c'est encore moi ^^

    pour dire que j'ai trouvé une solution J'intialise une constante qui va contenir le path actu et si je vois une uri du genre .\users --> je remplace le . par la constante et tout marche nickel !

    Mais si qqn trouve pourquoi cela change j'aimerais bien savoir

    @++
    Libzippp (C++)
    Lost in AStorm

  10. #10
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    Citation Envoyé par Djob(moi)
    le seul piège causant des bugs que je connaisse avec OpenDialog c'est le changement de CurrentDir quand on fait GetCurrentDir() mais cela n'a rien avoir ...
    ...si apparement c'est cela dont il s'agit :

    finalement oui si tu utilises des chemins relatifs , TopenDialog provoque evidemment des bugs ...
    car un quand tu ouvres une boite de dialog , ton chemin de point de depart (CurrentDir) change ...
    et prend la valeur du repertoire ou tu as pris ton dernier fichier ... et c'est un des pièges que je souleve souvent avec les programmeurs dephi ou bcb...

    par exemple si ton chemin relatif est .\mesfichier\
    si tu ouvres une boite de dialogue dans c:\test\ ,
    alors le point de depart devient "c:\test" au lieu de "c:\myappli\" (si ton exe est dans "c:\myappli\project1.exe")
    le chemin final à chercher sera donc c:\test\mesfichiers\ au lieu du chemin c:\my_appli\mesfichiers\


    c'est pourquoi il ne faut jamais utiliser des chemins relatifs et toujour fixer un point de départ absolu par rapport à l'endroit ou est ton appli:

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      String OriginePath = ExtractFilePath&#40;Application->ExeName&#41;;  // <------ "c&#58;\myappli\"
      String MesFichiersPath = OriginePath+"mesfichiers";  <------- "c&#58;\myappli\mesfichiers"
      Dir * d = opendir&#40;MesfichierPath.c_str&#40;&#41;&#41;;
      if&#40;d!=NULL&#41;&#123;
       ...
       closedir&#40;DIR&#41;;
      &#125;

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

Discussions similaires

  1. conflit avec bde
    Par chtiot dans le forum Bases de données
    Réponses: 5
    Dernier message: 02/05/2006, 19h19
  2. erreur de compilation - conflit avec Sleep
    Par timsah dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/02/2006, 18h52
  3. [POO] Conflit avec objet ayant le meme name
    Par ozzmax dans le forum Langage
    Réponses: 7
    Dernier message: 11/01/2006, 18h06
  4. [Sécurité] probleme d'acces en reseau local avec OPENDIR()
    Par babycracker dans le forum Langage
    Réponses: 3
    Dernier message: 28/09/2005, 14h51

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