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

VBScript Discussion :

Condition If qui fonctionne mais pas Else


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    bidouilleur
    Inscrit en
    Novembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 44
    Par défaut Condition If qui fonctionne mais pas Else
    Bonjour à tous, j'ai un problème probablement encore tout bête mais je ne trouve pas la solution.
    Dans une fonction DeleteFiles() j'ai une boucle For Each qui boucle sur chaques fichiers d'un répertoire. Les fichiers sont supprimés et vient ensuite un test if else qui doit vérifier si les fichiers sont bien supprimés et écrire les résultat dans un fichier texte.
    Si le fichier n'a pas été supprimé "if fso.FileExists(fichier)", ça écrit bien "Echec de supression du fichier..." mais par contre le Else (qui devrait écrire "Fichier supprimé avec succès...") n'est semble t'il pas pris en compte donc ça n'écrit rien du tout. Je ne comprend pas pourquoi.
    Voici un bout du code:

    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
    Dim FolderName, TEMP, MyFile
     
    Set WshShell = WScript.CreateObject("WScript.Shell" )
    Set fso = WScript.CreateObject("Scripting.FileSystemObject" )
    Set MyFile = fso.CreateTextFile("rapport.txt" , True)
     
    WINDIR = WshShell.ExpandEnvironmentStrings("%WinDir%" )
    DRIVE = WshShell.ExpandEnvironmentStrings("%SystemDrive%" )
    TEMP = WshShell.ExpandEnvironmentStrings("%TEMP%" )
     
    FolderName = TEMP
    if fso.FolderExists(FolderName) then
    	DeleteFiles(FolderName)
    end if
    MyFile.Close
    msgbox("Suppression terminée!")
     
    Function DeleteFiles(FolderName)   
            On Error Resume Next
            Dim ObjFolder
    	Dim ObjFiles
    	Dim ObjFile   
    	Set ObjFolder = fso.GetFolder(FolderName)   
    	Set ObjFiles = ObjFolder.Files
    	For Each ObjFile In ObjFiles 
                    set fichier = ObjFile
    	        fichier.Delete
    	        if fso.FileExists(fichier) then
    		        MyFile.WriteLine("[Echec de suppression du fichier]--- " & fichier)
    	        Else
    		        MyFile.WriteLine("[Fichier supprimé avec succès]--- " & fichier)
    	        end if
    	Next
    End Function

  2. #2
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 843
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 843
    Par défaut

    Si tu enlèves cette instruction qui se trouve au début de la fonction DeleteFiles ça vous donne quoi comme résultat ?

  3. #3
    Membre averti
    Homme Profil pro
    bidouilleur
    Inscrit en
    Novembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 44
    Par défaut
    Il y a surement de ça, seulement quand je la retire j'ai une erreur une fois fichier.Delete quand un fichier est en cours d'utilisation et ne peut être supprimé. mais le problème doit bien venir de la je pense.
    y a t'il moyen d'ignorer cette erreur quand un fichier est utilisé pour pouvoir supprimer l'instruction On Error Resume Next ?

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Par défaut
    Bonjour,

    As-tu essayé via le File Scripting Object (ta variable fso) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fso.DeleteFile cheminFichier, True

  5. #5
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Il y a peut-être un moyen de contourner le problème : c'est en essayant d'ouvrir le fichier (peut importe en lecture ou en écriture) puis intercepter l'erreur et choisir l'action à entreprendre en conséquence :
    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
    Function DeleteFiles(FolderName)   
        Dim ObjFolder
        Dim ObjFiles
        Dim ObjFile   
        Set ObjFolder = fso.GetFolder(FolderName)   
        Set ObjFiles = ObjFolder.Files
        For Each ObjFile In ObjFiles 
               On Error Resume Next
               'On tente d'ouvrir le fichier
               set fich=fso.OpenTextFile(objFile.Path, 1, False)
               If Err.Number = 0 Then
                   Fich.Close
                   MyFile.WriteLine("[Fichier supprimé avec succès]--- " & ObjFile) 
                   ObjFile.Delete true
               Else
                   MyFile.WriteLine("[Echec de suppression du fichier]--- " & ObjFile)
               End If
        Next
    End Function
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  6. #6
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 843
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 843
    Par défaut
    Citation Envoyé par l_autodidacte Voir le message
    Il y a peut-être un moyen de contourner le problème : c'est en essayant d'ouvrir le fichier (peut importe en lecture ou en écriture) puis intercepter l'erreur et choisir l'action à entreprendre en conséquence :
    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
    Function DeleteFiles(FolderName)   
        Dim ObjFolder
        Dim ObjFiles
        Dim ObjFile   
        Set ObjFolder = fso.GetFolder(FolderName)   
        Set ObjFiles = ObjFolder.Files
        For Each ObjFile In ObjFiles 
               On Error Resume Next
               'On tente d'ouvrir le fichier
               set fich=fso.OpenTextFile(objFile.Path, 1, False)
               If Err.Number = 0 Then
                   Fich.Close
                   MyFile.WriteLine("[Fichier supprimé avec succès]--- " & ObjFile) 
                   ObjFile.Delete true
               Else
                   MyFile.WriteLine("[Echec de suppression du fichier]--- " & ObjFile)
               End If
        Next
    End Function

    J'ai fait un petit test de votre méthode et j'ai essayé de sorte qu'il m'ouvre le fichier en écriture, alors j'ai constaté quand il s'agit d'un exécutable qui est en cours d'exécution, il ne le supprime pas ce qui très normale, alors quand il s'agit d'un fichier texte ou bien image ou bien vidéo, il le supprime même quand il est ouvert ??
    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
    Option Explicit
    Dim FolderName,fso,MyFile
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set MyFile = fso.CreateTextFile("rapport.txt",True)
    FolderName = "E:\Test\HackooDossier"
     
    Call DeleteFiles(FolderName)
    '**************************************************************************************
    Function DeleteFiles(FolderName)   
        Dim ObjFolder,ObjFiles,ObjFile,Fich  
        Set ObjFolder = fso.GetFolder(FolderName)   
        Set ObjFiles = ObjFolder.Files
        For Each ObjFile In ObjFiles 
               On Error Resume Next
               'On tente d'ouvrir le fichier en écriture
               set Fich=fso.OpenTextFile(objFile.Path,2,True)
               If Err.Number = 0 Then
                   Fich.Close
                   MyFile.WriteLine("[Fichier supprimé avec succès]--- " & ObjFile) 
                   ObjFile.Delete True
               Else
                   MyFile.WriteLine("[Echec de suppression du fichier]--- " & ObjFile)
               End If
        Next
    End Function
    '**************************************************************************************

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

Discussions similaires

  1. SELECT qui fonctionne mais pas UPDATE
    Par Kentin64 dans le forum Requêtes
    Réponses: 7
    Dernier message: 22/08/2011, 12h04
  2. Crawsler qui fonctionne mais pas totalement
    Par lemirandais dans le forum Langage
    Réponses: 1
    Dernier message: 02/08/2009, 01h25
  3. Réponses: 3
    Dernier message: 14/04/2009, 11h29
  4. Réponses: 1
    Dernier message: 03/08/2007, 10h09
  5. [FLASH 8] : FLA qui fonctionne mais pas le SWF
    Par xtaze dans le forum Flash
    Réponses: 9
    Dernier message: 24/10/2006, 09h14

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