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

Delphi Discussion :

L'OS impose confirmation dans une SHFileOPeration. Pourquoi ?


Sujet :

Delphi

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 536
    Points : 121
    Points
    121
    Par défaut L'OS impose confirmation dans une SHFileOPeration. Pourquoi ?
    Bonjour à tous

    Variables globales :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      Ptr_Search : ^TJvSearchFiles;
      Ptr_SHFiles : ^TJvSHFileOperation;
    Procedure appelant la fonction et syntaxe d'appel :
    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
    procedure TForm1.Btn_1Click(Sender: TObject);
    begin
          Nom_Rep_Ou_F := 'D:\SAUVEGARDE-W7_COPIE';
    
          Form1.StatusBar.SimpleText := 'SUPPRESSION DE ' + Nom_Rep_Ou_F;
          Form1.StatusBar.Update;
    
          IF Vider_Rep(Nom_Rep_Ou_F, @Form1.JvSearchFiles1, @Form1.JvSHFileOperation1) = False then
              begin
                    Form1.StatusBar.SimpleText := 'TOUT N''A PU ETRE SUPPRIME';
                    Form1.StatusBar.Update;
              end
          Else
              begin
                    Form1.StatusBar.SimpleText := 'TOUT A ETE SUPPRIME';
                    Form1.StatusBar.Update;
              end;
    
          Form1.Btn_Quitter.SetFocus;
    
    end;
    Code de la fonction elle-même :

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    Function Vider_Rep(Nom_Rep : string; Ptr_Sur_JvSearchFiles : Pointer; Ptr_Sur_JvSHfile : Pointer) : boolean;
    Var   i : integer;
          Val_Retour : boolean;
          Options : TJvSHFileOptions;
          Find : TSearchRec;
    
    begin
          Val_Retour := True;
    
          IF FindFirst(Nom_Rep, faAnyFile, Find) <> 0 then    // Nom_Rep n'existe pas
              begin
                    Val_Retour := False;
                    FindClose(Find);
                    Vider_Rep := Val_Retour;
                    Exit;
              end;
    
          IF Find.Attr AND 16 <> 16 then    // Nom_Rep ne désigne pas un répertoire
              begin
                    Val_Retour := False;
                    FindClose(Find);
                    Vider_Rep := Val_Retour;
                    Exit;
              end;
    
          Ptr_Search := Ptr_Sur_JvSearchFiles;
          Ptr_SHFiles := Ptr_Sur_JvSHfile;
    
          // LISTER LES FICHIERS ET REPERTOIRES ----------------
    
          Ptr_Search.Files.Clear;
          Ptr_Search.Directories.Clear;
          Ptr_Search.FileParams.FileMask := '';
          Ptr_Search.FileParams.FileMasks.Clear;
          Ptr_Search.RecurseDepth := 10000;
          Ptr_Search.RootDirectory := Nom_Rep;
          Ptr_Search.Search;
    
          // EFFACEMENT DES FICHIERS ----------------
          For i := 0 To Ptr_Search.TotalFiles -1 DO
              begin
                    FileSetAttr( Ptr_Search.Files.Strings[i], faArchive);
                    IF DeleteFile(Ptr_Search.Files.Strings[i]) <> True then Val_Retour := False; // Un fichier au moins n'a pu être supprimé
              end;
    
          // DEPROTECTION DES REPERTOIRES ----------------
          For i := 0 To Ptr_Search.TotalDirectories -1 DO
              begin
                    FileSetAttr( Ptr_Search.Directories.Strings[i], faArchive);
              end;
    
    
          // EFFACEMENT DES REPERTOIRES ----------------
    
          Ptr_SHFiles.Options := [];
          Ptr_SHFiles.SourceFiles.Clear;
          Ptr_SHFiles.DestFiles.Clear;
    
          Include(Options, fofAllowUndo);
          Include(Options, fofMultiDestFiles);
          Include(Options, fofNoConfirmation);  // Pas de confirmation
          Include(Options, fofNoConfirmMkDir);
          Include(Options, fofSilent);
          Include(Options, fofNoErrorUI);
    
          Ptr_SHFiles.SourceFiles.Add(Nom_Rep);
          Ptr_SHFiles.Operation := foDelete;
          Ptr_SHFiles.Execute; 
    
          // CLEAR sur je JvSHFilesOperation ------------
          Ptr_SHFiles.Options := [];
          Ptr_SHFiles.SourceFiles.Clear;
          Ptr_SHFiles.DestFiles.Clear;
    
          // CLEAR sur le JvSearchFiles -----------------
          Ptr_Search.Files.Clear;
          Ptr_Search.Directories.Clear;
          Ptr_Search.RootDirectory := '';
    
          Vider_Rep := Val_Retour;
    
    end;
    Malgré les options passées à JvSHFilesOperation, L'OS me demande confirmation :


    Pourquoi ?

    Voici les paramètres que je passe à la démo des Jedi :


    ... et là, ça marche. Pas de confirmation, rien.

  2. #2
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Bonjour,

    il me semble que les options choisies ne sont pas communiquées à "Ptr_SHFiles"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
          Include(Options, fofAllowUndo);
          Include(Options, fofMultiDestFiles);
          Include(Options, fofNoConfirmation);  // Pas de confirmation
          Include(Options, fofNoConfirmMkDir);
          Include(Options, fofSilent);
          Include(Options, fofNoErrorUI);
     
          Ptr_SHFiles.Options := [Options]; // <----- ICI
          Ptr_SHFiles.SourceFiles.Add(Nom_Rep);
          Ptr_SHFiles.Operation := foDelete;
          Ptr_SHFiles.Execute;
    @+ Cirec

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 536
    Points : 121
    Points
    121
    Par défaut
    Purée !!

    Tu as raison !! J'ai viré les options APRES au lieu de le faire comme d'habitude : AVANT ! Je corrige et je donne le retour.

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 536
    Points : 121
    Points
    121
    Par défaut
    Ben non... Il me demande toujours confirmation :

    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
          // EFFACEMENT DES REPERTOIRES ----------------
    
          Ptr_SHFiles.Options := [];
          Ptr_SHFiles.SourceFiles.Clear;
          Ptr_SHFiles.DestFiles.Clear;
    
          Include(Options, fofAllowUndo);
          Include(Options, fofMultiDestFiles);
          Include(Options, fofNoConfirmation);  // Pas de confirmation
          Include(Options, fofNoConfirmMkDir);
          Include(Options, fofSilent);
          Include(Options, fofNoErrorUI);
    
          Ptr_SHFiles.SourceFiles.Add(Nom_Rep);
          Ptr_SHFiles.Operation := foDelete;
          Ptr_SHFiles.Execute;
    L'instruction SHFile est envoyée à un autre dd : serait-ce la raison ? Ca ne me fait pas ça, d'habitude.

    Résolution : ça venait bien de 'endroit que tu désignais. J'avais mis le bastringue dans mon code

  5. #5
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    justement j'allais te dire que dans le dernier bout de code que tu donnes ne figurait toujours pas
    les options choisies ...

    Mais au final tout est bien qui fini bien ... content d'avoir pu t'aider

    @+ Cirec

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/06/2014, 17h23
  2. Réponses: 9
    Dernier message: 13/03/2008, 01h34
  3. Réponses: 2
    Dernier message: 17/12/2005, 20h52
  4. Réponses: 6
    Dernier message: 29/11/2005, 19h36
  5. Imposer une valeur dans une ligne "identity" d'une
    Par mibo94 dans le forum Access
    Réponses: 1
    Dernier message: 26/11/2005, 16h59

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