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 :

Droits création-écriture fichier dans répertoire


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut Droits création-écriture fichier dans répertoire
    Bonjour,
    Quelqu'un saurait comment savoir si on a le droit d'écriture dans un répertoire? (Savoir si il est en lecture seule, droits écriture, lecture, ...).

    Mon autre problème est que j'execute l'application que je vien d'écrire dans le répertoire (si j'ai les droits ) et j'attend que l'application se ferme pour la supprimer... Cela fonctionne très bien mais si je ferme mon application principale qui est entrain d'attendre que le programme ce ferme cela fait une violation d'accès....... Bon voila l'exemple :

    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
    // Fonction Execution d'un programme + gère l'état
    // Renvoie True si le programme est terminé
    function ExecuteProgramme(CommandProcess :String) :Boolean;
    Var  StartInfo   : TStartupInfo;
         ProcessInfo : TProcessInformation;
    begin
      { Mise à zéro de la structure StartInfo }
      FillChar(StartInfo,SizeOf(StartInfo),#0);
      { Seule la taille est renseignée, toutes les autres options }
      { laissées à zéro prendront les valeurs par défaut }
      StartInfo.cb     := SizeOf(StartInfo);
     
      { Lancement de la ligne de commande }
      If CreateProcess(Nil, PChar(CommandProcess), Nil, Nil, False,
                    0, Nil, Nil, StartInfo,ProcessInfo) Then
      Begin
        { L'application est bien lancée, on va en attendre la fin }
        { ProcessInfo.hProcess contient le handle du process principal de l'application }
        result:=False;
        Repeat
          { On attend la fin de l'application }
          Case WaitForSingleObject(ProcessInfo.hProcess, 200)Of
            WAIT_OBJECT_0 :result:=True; { L'application est terminée, on sort }
            WAIT_TIMEOUT  :result:=False;          { elle n'est pas terminée, on continue d'attendre }
          End;
          { Mise à jour de la fenêtre pour que l'application ne paraisse pas bloquée. }
          Application.ProcessMessages;
        Until Result;
        { C'est fini }
        result := True;
      End
      Else
      begin
        result := True;
        RaiseLastOSError;
      end;
    end;
    et j'execute l'application comme sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if ExecuteProgramme(PChar('prog.exe')) Then
    begin
      DeleteFile(PChar('prog.exe'));
    end;
    Alors quand l'prog.exe se ferme il est supprimée... Mais si je ferme mon application en laissant prog.exe éxécuté cela crée une violation d'accès!

    J'espère que je me suis bien expliqué Si quelqu'un a une réponse a mes problèmes, merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Bonsoir,

    Quelqu'un saurait comment savoir si on a le droit d'écriture dans un répertoire? (Savoir si il est en lecture seule, droits écriture, lecture, ...).
    Ajouter ShellApi dans la clause uses.

    Voir SHGetFileInfo + TSHFileInfo (param dwAttributes)


    @+

  3. #3
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut
    Merci pour ta réponse j'ai réussi a trouver mieux, ou plus facil, la fonction GetFileAttributes me renvoi ce que j'avai besoin... Mais toujours pas réussi a empecher cette violation d'accès

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    Mon autre problème est que j'execute l'application que je vien d'écrire dans le répertoire (si j'ai les droits ) et j'attend que l'application se ferme pour la supprimer... Cela fonctionne très bien mais si je ferme mon application principale qui est entrain d'attendre que le programme ce ferme
    Qui est qui dans ton histoire ?

  5. #5
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut
    J'ai mit un exemple plus bas, je n'arrivais pas bien a m'expliquer comme tu l'as remarquer

    Finalement j'ai utiliser SHGetFileInfo avec dwAttributes qui me renvoie un cardinal : Comment je fai pour lire le cardinal et savoir a quoi il correspon?? Y'a-t-il une liste?? (Cherché sous google mais sans succès)...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Les valeurs pour dwAttributes sont les suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     FILE_ATTRIBUTE_ARCHIVE	
     FILE_ATTRIBUTE_COMPRESSED	
     FILE_ATTRIBUTE_DIRECTORY
     FILE_ATTRIBUTE_HIDDEN	
     FILE_ATTRIBUTE_NORMAL	
     FILE_ATTRIBUTE_OFFLINE	
     FILE_ATTRIBUTE_READONLY	
     FILE_ATTRIBUTE_SYSTEM	
     FILE_ATTRIBUTE_TEMPORARY
    Les mêmes constantes sont définies comme valeur retournée par GetFileAttributes().

  7. #7
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut
    Personne ne voit comment sortir de la Fonction ExecuteProgramme quand je ferme l'application même si result = False ???

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    bonjour

    1) Sortir de la portée locale 2 variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ExitCode: LongWord;
    ProcessInfo: TProcessInformation;
    2) Creer une fonction genre CanCloseProcess(): boolean;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function TLaForm.CanCloseProcess(): boolean;
    begin
      Result := Application.MessageBox(.....) = ID_YES;
      if Result then begin
        if GetExitCodeProcess(ProcessInfo.hProcess, ExitCode) then
        begin
          if ExitCode = STILL_ACTIVE then TerminateProcess(ProcessInfo.hProcess, 0);
          CloseHandle(ProcessInfo.hProcess);
        end;
      end; 
    end;
    3) A la fermeture de la fiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TLaForm.FormCloseQuery(Sender: TObject; var CanClose:Boolean);
    begin
      CanClose := CanCloseProcess();
    end;

Discussions similaires

  1. Surveiller et lister la création de fichiers dans un répertoire
    Par remyclem dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 07/06/2012, 14h24
  2. [fopen] création de fichier dans un répertoire donné
    Par bakaratoun dans le forum MATLAB
    Réponses: 4
    Dernier message: 09/12/2009, 14h39
  3. [Conception] donner les droits d'écriture sur un répertoire
    Par Mat_DZ dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 22/05/2007, 10h46
  4. [Tomcat] droits d'écriture fichier dans une servlet
    Par Laurent.B dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 30/05/2006, 19h35
  5. création de fichiers dans le disque dur
    Par sex-sansbol dans le forum ASP
    Réponses: 6
    Dernier message: 24/08/2004, 09h39

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