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

Langage Delphi Discussion :

Message et comportement curieux


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Message et comportement curieux
    Bonjour,

    Je cheche à supprimer les fichiers d'un répertoire.
    J'ai trouvé sur le Net un code source dont je me suis inspiré pour écrire la fonction suivante :

    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
     
    function Tools_FUNC_DeleteFilesInDirectory(Dir: String): Boolean;
    var
      Rep: TshFileOpStruct;
    begin
      if not DirectoryExists(Dir) then Exit; //si le dossier existe
     
      if Dir[Length(Dir)] <> '\' then Dir := Dir + '\';
      Dir := Dir + '*.*';
     
      //régle les paramètre
      FillChar(Rep, SizeOf(Rep),#0);
      Rep.wFunc := FO_DELETE;
      Rep.pFrom := PChar(Dir);
      Rep.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION;
      //supprime
      Result := ((ShFileOperation(Rep) = 0) and (not Rep.fAnyOperationsAborted));
    end;
    L'appel à cette fonction déclanche le message suivant :

    Elément introuvable
    Il n’existe plus dans .19. Vérifier l’emplacement de l’élément et réessayez
    .


    Comme le message propose de recommencer je clique sur le bouton recommencer et la fonction s'exécute normalement

    Quelqu'un peut-il expliquer ce phénomène et surtout me proposer une solution pour qu'au beau milieu d'une appli le message n'apparaisse pas et le fonction s'exécute.

    A l'avance Merci

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Essaye FO_SILENT

    je te conseille aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rep.pFrom := PChar(Dir + #0);
    J'ai eu des soucis dans certains cas !
    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

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Ok Ca marche
    Avec Rep.pFrom := PChar(Dir + #0); je n'ai plus de message intempestif

    Mille merci

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 745
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 745
    Points : 13 306
    Points
    13 306
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Essaye FO_SILENT

    je te conseille aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rep.pFrom := PChar(Dir + #0);
    J'ai eu des soucis dans certains cas !
    C'est même obligatoire .

    pFrom pourrait contenir plusieurs noms de fichiers sous forme AZT et puisqu'il n'y a pas d'information de taille (nombre de chaînes), la lecture se fait jusqu'à trouver une chaîne vide (#0).

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Pas évident !
    Bonjour,

    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Rep.pFrom := PChar(Dir + #0);
    Celà fonctionne correctement sous Vista mais pas sous XP !

    J'ai contourné le problème en utilisant une TFileListBox telque :
    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
    var
      i: integer;
      S: string;
      Sts: TStringList;
    begin
     S:= ExtractFilePath(Application.exeName)+'Data\CALIB\';
     FileListBox.Directory:= S;
     Sts:= TStringList.Create;
       try
         Sts.Assign(FileListBox.Items);
         for i:=0 to Sts.Count-1 do DeleteFile(PEEKCOLOR_PATH+'Data\CALIB\'+Sts[i]);
         FileListBox.Clear;  
       finally
         Sts.Free;
       end;
    Celà fonctionne quelque soit la version de Windows

    Merci à tous

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 745
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 745
    Points : 13 306
    Points
    13 306
    Par défaut
    Tu aurais pu faire simplement comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dir := IncludeTrailingPathDelimiter(Dir) + '*.*'#0#0;
    Rep.pFrom := PChar(Dir);

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

Discussions similaires

  1. [TOMCAT5.5] Comportement curieux de la mémoire
    Par tnodev dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 02/11/2007, 11h26
  2. [JScrollBar] comportement curieux
    Par rems033 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 01/10/2007, 10h06
  3. [Cookies] Mes cookies ont un comportement curieux
    Par Jinx_ dans le forum Langage
    Réponses: 2
    Dernier message: 16/03/2007, 16h11
  4. [Rewrite .htaccess] Comportement curieux aussi
    Par Bensor dans le forum Apache
    Réponses: 2
    Dernier message: 23/12/2006, 13h22
  5. comportement curieux font-bold sous ffx ?
    Par SpaceFrog dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 22/06/2006, 11h51

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