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 :

poblème avec FileSearch et wildcard (*) [Débutant]


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 395
    Par défaut poblème avec FileSearch et wildcard (*)
    Bonjour,

    j'essaie de tester l'existence de tout fichier correspondant au format suivant iview*.exe dans un répertoire d'un réseau.

    J'obtiens en retour une chaine vide.
    Quand je précise le nom exact d'un fichier, j'obtiens bien en retour le fullname de l'objet recherché.

    Comment puis-je faire pour simuler un espèce de dir et récupérer le premier fullname de l'objet qui correspond à ma recherche ?

    Voici mon code

    Ceci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	  Setup_Converter       =  "iview428_setup.exe";
    	  Setup_Path            =  "Y:\\99_Varions\\Free_Software\\Irfanview\\";
    	  asFileName = FileSearch(Setup_Converter, Setup_Path); // Setup Exists ?
    	  if (asFileName.IsEmpty())
    mais pas ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	  Setup_Converter       =  "iview*.exe";
    Merci d'avance pour vos lumières

    NB : ce n'est pas un problème de CurrentDrive. J'ai fait le test avec et sans ChgCurrentDrive.

  2. #2
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 395
    Par défaut
    Voilà,

    il fallait utiliser FindFirst.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	  // look for Any Converter Setup Program
    	  Setup_Converter       =  "iview*.exe";
    	  Setup_Path            =  "Y:\\99_Various\\Free_Software\\Irfanview\\";
     
     
    	  if (FindFirst(Setup_Path+Setup_Converter, faAnyFile, Infos_Files))
    		{
    		  return false;
    		}
    		else
    		{                                          // Setup Irfanview
    		   asFileName = Infos_Files.Name;          // Get Name from First find
    		   asFileName = Setup_Path + asFileName;   // Add Full path

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    Question visibilité, je trouve plus logique de mettre d'abord le code en cas de bon fonctionnement d'une fonction, même si le retour est 0 comme NO_ERROR ou ERROR_SUCCESS déclaré dans win.h qui est le cas pour FindFirst
    Code algo : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SI TEST
    ALORS
      ça c´est bien passé
    SINON
      ouch ! erreur !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (FindFirst(...) == ERROR_SUCCESS)
    {
      asFileName = Infos_Files.Name; 
      ...
    }
    else
      return false;
    bcp utilise " ! " au lieu de " == 0 "
    En tant Delphiste, cela me surprend un peu, mais je m'habitue !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 395
    Par défaut
    Question visibilité, je trouve plus logique de mettre d'abord le code en cas de bon fonctionnement d'une fonction, même si le retour est 0 comme NO_ERROR ou ERROR_SUCCESS déclaré dans win.h qui est le cas pour FindFirst
    J'approuve et j'adapte en conséquence.
    L'inconvénient que j'y vois c'est que si le code est long, le else se perd un peu dans la masse et devient alors moins lisible, tandis qu'avec le teste inversé, on a toujours une vue sur les 2 cas.

    Mais c'est très relatif !!

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    Après, il y a les extrémistes de la fonction de 25 lignes maximum !
    J'ai rarement des boucles ou des imbrications qui dépasse une page écran
    En Delphi, je fais des sous-fonctions, cela permet d'avoir un code principal de la fonction très court et lisible

    Une règle important à mon avis, c'est la séparation du code !
    Il faut éviter de mélanger les choses, rien est plus horrible qu'un code qui mélange un peu tout et n'importe quoi !

    Ton code peut-être réutilisable, une fonction FileExistsMask par exemple, dans une unité GZFileUtils, perso, j'ai fait mes fonctions GetFileDir, GetDirDir... qui remplisse une TStringList, le code est certe un peu plus long car découper, utilise des objets intermédiaires donc plus lent, mais mieux vaut un code maintenable qui répond au besoin du client, qu'un code fouilli qui certe répond au besoin mais dont l'évolution sera pénible et soumise au bug !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 395
    Par défaut
    Excellente remarque, d'ailleurs je tend à cela, mais tu te doutes qu'en tant que total débutant total en C++, cela fait un monde à assimiler pour moi.

    Mais, je ne suis pas mécontent de mon autodidactisme assisté. J'arrive a récupérer un fichier PCX, à le convertir avec un soft externe (irfanview) en .JPG, tout en ayant vérifié l'existence de irfanview et installé si pas présent, puis à afficher mon Jpg généré.

    Semaine rude, mais avec une grande progression.

    Ce que je ne sais pas faire c'est justement externaliser mes fonctions pour les rendre accessibles à d'autres codes que je ferai plus tard.

    Par exemple, si je veux prendre ceci et le mettre en dehors de mon code actuel, je fais comment ? :

    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
    //---------------------------------------------------------------------------
    //# bool TForm1::ExecuteWait(Prog , Parms, Voir)
    //   Execute an application and Wait until completion
    //   "Voir" Allows display or not
    //---------------------------------------------------------------------------
    bool __fastcall  TForm1::ExecuteWait(String Programme,String  parametres, bool voir)
    {
      SHELLEXECUTEINFO execinfo;      // Structure ShellExecute(Ex) info
     
      //typedef struct _SHELLEXECUTEINFO {
      //	DWORD cbSize;
      //	ULONG fMask;
      //	HWND hwnd;
      //	LPCTSTR lpVerb;
      //	LPCTSTR lpFile;
      //	LPCTSTR lpParameters;
      //	LPCTSTR lpDirectory;
      //	int nShow;
      //	HINSTANCE hInstApp;
      //	LPVOID lpIDList;
      //	LPCTSTR lpClass;
      //	HKEY hkeyClass;
      //	DWORD dwHotKey;
      //	union {
      //		HANDLE hIcon;
      //		HANDLE hMonitor;
      //	} DUMMYUNIONNAME;
      //	HANDLE hProcess;
      //} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;
     String action;                                 // action to run
     
      action =  "open";
      memset(&execinfo, 0, sizeof(execinfo));
      execinfo.lpFile = Programme.c_str();          // programme
      execinfo.cbSize = sizeof(execinfo);
      execinfo.lpVerb = action.c_str();             // Action = Open
      execinfo.fMask = SEE_MASK_NOCLOSEPROCESS;
      execinfo.nShow = SW_SHOWDEFAULT;
      execinfo.lpParameters = parametres.c_str();   // Parms
      if ((voir)){                                  // Show Process or not
    	 execinfo.nShow = SW_SHOW;
    	}
    	else {
    	 execinfo.nShow = SW_HIDE;
      }
      if (ShellExecuteEx(&execinfo)) {
    		WaitForSingleObject(execinfo.hProcess, INFINITE);
    		return TRUE;
    	  }
    	  else {
    		return FALSE;
       }
     
    }

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

Discussions similaires

  1. [1.x] [Jobeet Jour 5]Poblème avec slugify
    Par FD-00 dans le forum Débuter
    Réponses: 3
    Dernier message: 08/10/2009, 22h27
  2. [VB6] Spécifier plusieurs types de fichiers avec FileSearch
    Par yaya54 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 31/01/2008, 15h59
  3. Pobléme avec les évenements
    Par zghidi dans le forum ASP.NET
    Réponses: 5
    Dernier message: 16/08/2007, 10h40
  4. Poblème avec ShellExecute
    Par adaneels dans le forum Delphi
    Réponses: 3
    Dernier message: 02/02/2007, 16h25
  5. Poblème avec QuickReport et les TQRDBText
    Par Alain Dionne dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/03/2004, 13h12

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