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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �m�rite
    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
    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 �
    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 ?

    @++

  2. #2
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    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 �m�rite
    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
    Par d�faut
    Salut,

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

    @++

  4. #4
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    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 �m�rite
    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
    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 ?

    @++

  6. #6
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    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 �m�rite
    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
    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

    @++

  8. #8
    Membre �m�rite
    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
    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 ???

    @++

  9. #9
    Membre �m�rite
    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
    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

    @++

  10. #10
    Membre exp�riment�
    Avatar de Djob
    Inscrit en
    Ao�t 2002
    Messages
    215
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2002
    Messages : 215
    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(Application->ExeName);  // <------ "c:\myappli\"
      String MesFichiersPath = OriginePath+"mesfichiers";  <------- "c:\myappli\mesfichiers"
      Dir * d = opendir(MesfichierPath.c_str());
      if(d!=NULL){
       ...
       closedir(DIR);
      }

+ 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, 18h19
  2. erreur de compilation - conflit avec Sleep
    Par timsah dans le forum C++Builder
    R�ponses: 5
    Dernier message: 02/02/2006, 17h52
  3. [POO] Conflit avec objet ayant le meme name
    Par ozzmax dans le forum Langage
    R�ponses: 7
    Dernier message: 11/01/2006, 17h06
  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, 13h51

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