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 :

Problème avec DeleteFile : le fichier n'est pas effacé


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2005
    Messages : 98
    Points : 67
    Points
    67
    Par défaut Problème avec DeleteFile : le fichier n'est pas effacé
    Bonjour,

    Voici un ptit bout de code qui marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If FileExists(cible) then  DeleteFile(cible);
    Bon c un peu plus compliqué que ça, mais le truc, c'est que il rentre bien dans le if, donc il détecte bien le fichier, mais il ne veut pas l'effacer...
    Le fichier cible est un fichier en réseau sur un serveur auquel j'ai accès (sinon le logiciel ne se lance pas), mais normalement les fichiers sont supprimables à la main donc ça ne devrait pas poser de problèmes.

    Je n'ai pas de message d'erreur, tout se passe bien mais le fichier ne s'efface pas.. merci pour votre aide!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour

    Je ne peux que vous confirmer ce que vous connaisser déja.
    Delete file comme l'aPI SHFileOperation ne renvoi pas d'erreur quand il ne peuvent pas détruire un fichier. Ils renvoient True si le fichier est détruit et False s'il ne l'est pas.

    Doc votre code se comporte normalement, et l'on ne peut pas savoir directement par le deletefile pourquoi le fichier n'est pas détruit.

    Il faudrait tester indépendament le fichier pour essayer de comprendre la cause du problème.
    Droit d'access.
    Fichier ouvert.
    Erreur dans le nom de fichier.

    Une recherche rapide dans google m'a permis de me rendre compte que la plupart des gens se contente de detecter que le fichier n'est pas détruit sans chercher pourquoi.
    Déssolé, je n'ai pas mieux.

  3. #3
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 2 474
    Points : 2 120
    Points
    2 120
    Par défaut
    Je crois que s'agissant d'un lecteur reseau, les fonction de Delete et copie ne marchent pas de maniere triviale.

    J'ai noté que sous dos, la fonctio COPY par exemple ne marche pas avec le reseau mais il faut passer par une 2e fonction genre COPYEX pour que les chemins reseau marchent.

    Regarde de ce coté la ..... (il est possible que la fonction Delete de Borland ne amrche pas avec le reseau il te faudra donc chercher une autre fonction acceptant les chemin reseau).

    Sinon essayer avec un autre fichier (local celui la) pour verifier ton algo.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2005
    Messages : 98
    Points : 67
    Points
    67
    Par défaut
    Déja je ne pense pas que ce soit les droits d'accès, comme je l'ai dit j'ai tous les droits et lecture et en écriture, les fichiers ne sont pas ouverts car pour les tests je crée un fichier manuellement puis j'essaye de le supprimer.

    Je viens d'essayer en local et ça n'efface pas le fichier non plus!

    Le booléen que renvoie deleteFile est à False.. C'est bizarre qu'il detecte bien le fichier mais qu'il ne veule pas l'effacer!

    je crée un nouveau projet pr tester cette fonction ça pourrait venir de Delphi non?

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2005
    Messages : 98
    Points : 67
    Points
    67
    Par défaut
    je viens de créer un projet tout simple: un bouton qui supprime un fichier précis... il supprime bien le fichier que ce soit en local ou en réseau...

    La je ne comprends plus -_-

  6. #6
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 2 474
    Points : 2 120
    Points
    2 120
    Par défaut
    non cela ne viens pas de Delphi.
    mais peut etre que le fichier en question est ouver et mal fermé depuis uen autre procedure .....


    Remarque : Les balises Codes se font entre "[]"
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2005
    Messages : 98
    Points : 67
    Points
    67
    Par défaut
    le logiciel n'ouvre pas les fichiers.. je pense qu'il y a un problème dans l'algo mais je viens de découvrir un truc bizarre lol je vs explique:

    on sélectionne les fichiers à selectionner ds une arborescence comme sur windows, on peut en sélectionner plusieurs. On stocke les noms ds un tableau de strings.

    Puis ds une boucle on delete un par un, ça donne ça à peu près :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    i:=0
    while i<cpt
    begin
        deletefile(chemin + '\' + tab.Strings[i]);
        i:=i+1;
    end;
    kan je fais le pas à pas, les noms des fichiers sont bons, par exemple si mon tableau de strings est composé de : fic1, fic2, fic3 et que j'ai sélectionné fic3 en dernier, ils seront tous effacés sauf fic3! alors que, et je le répète, je vois bien dans le pas à pas que le nom du fichier est bon!

    ps: oups pr les balises lol, merci


    edit: me suis trompé c le dernier qui n'est pas effacé! j'ai corrigé

  8. #8
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 613
    Points : 667
    Points
    667
    Par défaut
    En faisant ça, les noms de fichiers sont corrects ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    i:=0 
    while i<cpt 
    begin 
        ShowMessage(chemin + '\' + tab.Strings[i]); 
        i:=i+1; 
    end;
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2005
    Messages : 98
    Points : 67
    Points
    67
    Par défaut
    non j'ai dit c'est un exemple, ça fait plutôt ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    cible:= DirLtBx_RepSource_Ouvrir.Directory;
        if fichier then
        begin
            i:=0;
            while i<cpt do
            begin
               cible :=DirLtBx_RepSource_Ouvrir.Directory+'\'+ tab.Strings[i];
               If FileExists(cible) then DeleteFile(cible);
               i:=i+1;
           end;
        end
        else etc...
    avec dirLtBx_RepSource_Ouvrir qui est un TDirectoryListBox et fichier un booléen qui regarde si on selectionne un fichier ou un répertoire

  10. #10
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 2 474
    Points : 2 120
    Points
    2 120
    Par défaut
    Attention !
    Tu incremente ta boucle dans le test if file exists.

    Autrement si elle n'existe pas ... tu ne l'efface pas .. et tu boucle infiniement sur le meme fichier qui n'existe pas.

    Ca ne resoucra pas ton probleme mais ca t'en evitera d'autres.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  11. #11
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 613
    Points : 667
    Points
    667
    Par défaut
    Je réitère, remplce le DeleteFile par un ShowMessage, pour être sûr que les fichiers sont bons.
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2005
    Messages : 98
    Points : 67
    Points
    67
    Par défaut
    merci pr l'incrémentation lol -_-' , j'avais rajouté le fileExist pour faire les tests et j'ai pas trop réfléchi :p

    sinon pour le showmessage je confirme: les noms des fichiers sont bons.

  13. #13
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 613
    Points : 667
    Points
    667
    Par défaut
    Donc, si je résume, tu es en train de dire que dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DeleteFile('C:\toto.txt');
    supprime le fichier c:\tata.txt

    C'est bien ça ?
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  14. #14
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2005
    Messages : 98
    Points : 67
    Points
    67
    Par défaut
    nonon c pas ça: imagine dans le tableau j'ai 3 strings: fic1.doc fic2.doc et fic3.doc
    donc c:\fic1.doc etc..

    kan je regarde au pas à pas dans la boucle, il passe bien par chacun des fichiers, mais le dernier sur lequel il passe ne se supprime pas... c'est incompréhensible.. donc si je n'en supprime qu'un à la fois il ne le supprime pas, pourtant le showmessage l'affiche bien.

  15. #15
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2005
    Messages : 98
    Points : 67
    Points
    67
    Par défaut
    j'ai trouvé un truc!

    En fait le fichier qu'il ne veut pas supprimer, est celui qui est encadré (sélectionné en fait), c dur à expliquer..quand je dis sélectionné c'est pas en surbrillance, mais encadré par des pointillés. C'est le dernier fichier sur lequel on clique, même si notre clic est une déselection.

    je vous aurais bien montré une image pour vous expliquer mais j'ai pas accès à mon ftp d'ici

    En passant ça m'a permis de trouver un bug, ça me fait une erreur E/S 6 si jamais je clique sur supprimer alors que la sélection est sur un fichier qui n'est pas en surbrillance (j'espère que vous me suivez)

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    si le fichiers qui n'est pas détruit est celui qui a le focus dans la grille c'est que la grille fit quelque chose soit avec le fichier, soit avec le nom du fichier.

    Je pensait aux habituelle espace venant se fourrer la ou on ne les attent pas.

    Pour teste cela vous pouriez essayer un ExistFile du fichier avant le deletefile.

    Si ExisteFile declenche un message et que le message apparait, c'est que le nom du fichier est faux.

  17. #17
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Il faut redéfinir l'attribut du fichier avant sa suppression...
    Citation Envoyé par [img
    http://sub0.developpez.com/tf1.png[/img]]function FileSetAttr(const FileName: string; Attr: Integer): Integer;

    La fonction FileSetAttr définit les attributs du fichier FileName à partir de la valeur transmise par Attr. La valeur d'Attr est constituée en combinant les constantes d'attribut de fichier appropriées, comme dans ce qui suit :

    FileSetAttr('MyFile.sys', faReadOnly or faSysFile);

    FileSetAttr renvoie zéro si l'exécution de la fonction réussit. Sinon, la valeur renvoyée est un code d'erreur.

    Remarque : Voir TSearchRec pour une description des constantes d'attribut de fichier.

    Lien tout en bas à gauche de cette fenêtre
    De retour parmis vous après 10 ans!!

  18. #18
    Membre confirmé Avatar de badr
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    décembre 2004
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Maroc

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : décembre 2004
    Messages : 529
    Points : 511
    Points
    511

  19. #19
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2005
    Messages : 98
    Points : 67
    Points
    67
    Par défaut
    Ahh merci sub0! ça marche maintenant, mais je ne comprends pas pourquoi il ne voulait pas supprimer les fichiers qui avaient le focus...

    Y a toujours une erreur qui vient d'un peu plus haut quand le fichier qui a le focus ne sera pas effacé mais c bon je sais pourquoi..

    merci à tous

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

Discussions similaires

  1. [2.x] Problème upload image quand le fichier n'est pas spécifié
    Par simnitch dans le forum Symfony
    Réponses: 4
    Dernier message: 01/04/2014, 19h21
  2. Problème avec un div qui n'est pas pris en compte
    Par boss_gama dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 25/07/2006, 17h32
  3. Problème avec DeleteFile
    Par Kara dans le forum Langage
    Réponses: 2
    Dernier message: 16/12/2005, 15h33
  4. Réponses: 2
    Dernier message: 21/10/2005, 18h29

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