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

  1. #1
    Membre du Club
    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é
    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é
    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
    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
    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é
    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. ###raw>post.musername###
    Membre du Club
    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é
      0  0

  8. ###raw>post.musername###
    Membre éclairé
    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;
      0  0

  9. ###raw>post.musername###
    Membre du Club
    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
      0  0

  10. #10
    Membre chevronné
    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é
    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
    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é
    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
    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
    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é
    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é
    Ce message n'a pas pu être affiché car il comporte des erreurs.
    De retour parmis vous après 10 ans!!

  18. #18
    Membre confirmé

  19. #19
    Membre du Club
    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

###raw>template_hook.ano_emploi###