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

Web & réseau Delphi Discussion :

[IdFTP] Problème de libération d'un fichier après publication


Sujet :

Web & réseau Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut [IdFTP] Problème de libération d'un fichier après publication
    Bonjour à tous !

    Je développe actuellement une application de création de sites WEB. Tout fonctionne correctement, mais j'ai remarqué qu'une fois qu'on a effectué une publication sur FTP (j'utilise IdFTP pour cela), il m'est impossible de réacceder à ces fichiers (en écriture) sans redémarrer l'application.

    Très intelligent que je suis , je devine que cette erreur vient du fait que le composant IdFTP ne ferme pas correctement les fichiers que je lui demande d'envoyer.

    Je précise que j'utilise la procedure TIdFTP.Put(const ASourceFile: string; const ADestFile: string = ''; const AAppend: boolean = false);

    Bref voila, et merci d'avance pour toutes les âmes charitables qui voudront bien m'aider !

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Normalement IdFTP n'écrase pas les fichiers déjà existant, il faut les supprimer avant de refaire un téléchargement.
    Ton problème vient peut être de la.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Je ne suis pas sûr de t'avoir bien compris, Rayek, mais j'ai tenté de supprimer le fichier que je tente d'envoyer avant de l'envoyer ; ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try
      IdFTP1.Delete(NomFichier);
    except
    end;
    IdFTP1.Put(NomFichierSurDisque, NomFichier);
    Malheureusement, le problème persiste =/

    Je me demande également si le fait de passer par un TFileStream ne résolverait pas le problème ... l'ennui est que je ne maîtrise absolument pas les Stream Après quelques recherches, j'essaye ce code-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Fs:=TFileStream.Create(NomFichierSurDisque,fmOpenRead,fmShareDenyWrite);
    IdFTP1.Put(Fs, NomFichier);
    FreeAndNil(Fs);
    Mais ça marche encore moins bien : il me fait une erreur sur ce code en me disant qu'il est impossible d'ouvrir le fichier demandé

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Pour ma part je fais de cette manière

    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
     
    function TFTPIndy.IsFileExistInFTP(sFileName: String): Boolean;
    begin
      With FIdFTP do
      Try
       // ShowMessage(sFilename);
        Result := Size(sFileName) <> -1
      Except on Exception do
        Result := False;
      end;
    end;
     
    function TFTPIndy.UploadFile(Source : String;OverWrite : Boolean = false) : Boolean;
    var
      sFileName : String;
    begin
      sFileName := ExtractFileName(Source);
      Result := True;
     
      With FIDFTP do
      try
        // le fichier existe-t-il déjà sur le FTP ?
        if IsFileExistInFTP(sFileName) then
        begin
          if not Overwrite then
          case MessageDlg('Le fichier existe déjà, voulez vous écraser l''ancien ?',mtConfirmation,[mbYes,mbNo],0) of
            mrYes : OverWrite := True;
            mrNo : Exit;
          end;
     
          if Overwrite then
            Delete(sFileName);
        end;
        //transferrt du fichier vers le FTP
        Put(Source,sFileName);
     
      Except on E:Exception do
        Result := False;
      end;
     
    end;
    Voir dans ma signature avec EasyIndy
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    J'ai essayé tes fonctions, mais le problème est toujours là
    Peut être l'as-tu mal compris ; je m'explique par un exemple :

    - J'ai un fichier Accueil.html dans mon site.

    - Tout d'abord, je compile le site entier ; il recrée donc tous les fichiers html. Tout se passe correctement. (j'utilise pour les sauvegarder la fonction TStringList.SaveToFile(FileName: String); ). Le fait de le recompiler plusieurs fois ne pose jusqu'ici aucun problème.

    - Je lance ensuite la publication de ce dernier, tout se passe bien : les fichiers sont bien mis à jours sur le serveur FTP.

    - C'est maintenant que ça se gâte. Je tente à nouveau de compiler mon site, après avoir effectué 2/3 modifs. Mais là, il me dit qu'il est impossible 'accéder au fichier Accueil.html, première page compilée.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    J'ai trouvé d'où venait le problème :
    ce n'était en fait pas du tout le composant IdFTP, mais une fonction qui me servait à obtenir la taille des fichiers que je transfère (afin de faire une barre de progression).
    Je l'ai trouvée dans la F.A.Q (http://delphi.developpez.com/faq/?pa...illefichierapi) et je n'ai pas fait attention, mais en fait elle ne ferme pas le handle du fichier après utilisation. =/ Ca explique tout !
    En tout cas merci quand même Rayek ! les deux fonctions que tu m'as montrées m'ont été utiles

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

Discussions similaires

  1. Problème de lecture d'un fichier après upload
    Par sissi25 dans le forum Langage
    Réponses: 1
    Dernier message: 10/02/2009, 11h51
  2. Libération d'un fichier aprés Upload
    Par zooffy dans le forum ASP.NET
    Réponses: 12
    Dernier message: 14/01/2009, 11h03
  3. Réponses: 4
    Dernier message: 18/01/2008, 21h48
  4. [IdFTP]Problème transfert fichier
    Par Isa31 dans le forum Delphi
    Réponses: 44
    Dernier message: 13/12/2006, 14h53
  5. Réponses: 2
    Dernier message: 20/04/2006, 22h12

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