Si fichier plus petit qu'un autre => kill

Signaler
Messages postés
116
Date d'inscription
vendredi 27 février 2004
Statut
Membre
Dernière intervention
25 avril 2012
-
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
-
salut a tous,
je me casse les dents sur une fonction mais peut etre aurez vous la soluce ?!

voici ma source

Function CmpFlx()
chemin1 = "c:\stats"
chemin2 = "c:\supervision"
Set fs = CreateObject("Scripting.FileSystemObject")
Set répertoire1 = fs.GetFolder(chemin1)
Set répertoire2 = fs.GetFolder(chemin2)
Set lesFichiers1 = répertoire1.Files
Set lesFichiers2 = répertoire2.Files

For Each unFichier In lesFichiers1
a = CStr(Date)
a1 = Left(a, 2) 'jour
a2 = Mid(a, 4, 2) 'mois
'si le fichier est d'aujourdhui et ressemble a ".flx"
If Mid(unFichier, 10, 4) = a2 + a1 And unFichier Like "flx" Then
'si un fichier est plus petit qu'un autre suprimer le plus petit

End If



Next unFichier
End Function

le 1er probleme est de syntaxe, quande je dit
If Mid(unFichier, 10, 4) = a2 + a1 And unFichier Like "flx"
cette syntaxe ne fonctionne pas ! et je ne sait pas pourquoi
alors if unFichier Like "flx" et if mid... fonctionnent séparement!

mon 2eme probleme :
pas moyen de trouver comment dire
"si un fichier est plus petit qu'un autre suprimer le plus petit"

me voila dans une impasse et apres de nombreuse recherche infructueuse tant dans msdn que dans des essais
nombreux de syntaxe difference rien n'y fait !

merci d'avance tout ceux qui pourrait m'aider !

CoBaLtOnE

4 réponses

Messages postés
45
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
28 juillet 2004
2
Voilà la plus simple des solutions, mais peut-être pas vraiment ce que tu veux :

pour choper la taille en octets de tes fichiers :

dim TailleFic1 as long
TailleFic1=FileLen("C:\rep\fic1.ext")

Tu fais ca pour tes 2 fichiers, tu compares ensuite TailleFic1 et TailleFic 2, et tu kill le plus petit :

if taillefic1 < taillefic2 then
kill "C:\rep\fic1.ext"
else
kill "C:\rep\fic2.ext"
end if
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
2
Pour ton pb1 je pense que tu devrais parenthéser les 2 expressions

If (Mid(unFichier, 10, 4) = (a2 + a1)) And (unFichier Like "flx") Then
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
2
Je réponds ici car j'avais besoin de tout revoir ...

Ton code devraiit ressembler à ceci.

Function CmpFlx()
Dim lTailleMini As Long ' Taille du plus petit fichier
Dim sFichierMini As String ' Nom du plus petit fichier
Dim lNbFichierTest As Long ' Nombre de fichiers testés

    chemin1 = "c:\stats"
    chemin2 = "c:\supervision"
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set répertoire1 = fs.GetFolder(chemin1)
    Set répertoire2 = fs.GetFolder(chemin2)
    Set lesFichiers1 = répertoire1.Files
    Set lesFichiers2 = répertoire2.Files
    
    ' on intialise la longueur à -1 pour savoir quand on passera sur le premier fichier
    lTailleMini = -1
    ' Nombre de fichiers testés = 0
    lNbFichierTest = 0

    ' Parcours des fichiers du répertoire
    For Each unFichier In lesFichiers1
        
        a = CStr(Date)
        a1 = Left(a, 2) 'jour
        a2 = Mid(a, 4, 2) 'mois
        'si le fichier est d'aujourdhui et ressemble a ".flx"
        If Mid(unFichier, 10, 4) = CStr(a2 & a1) And unFichier Like "flx" Then
            
            ' On teste un nouveau fichier
            lNbFichierTest = lNbFichierTest + 1
            ' on récupère le nom complet du fichier et sa taille
            If lTailleMini = -1 Then
                
                ' on est sur le premier, on le charge directement
                sFichierMini = unFichier.Drive & unFichier.Path & unFichier.Name
                lTailleMini = Len(sFichierMini)
            Else
                
                ' on a déjà un fichier chargé, on teste
                If lTailleMini > Len(unFichier.Drive & unFichier.Path & unFichier.Name) Then
                    ' fichier plus petit
                    sFichierMini = unFichier.Drive & unFichier.Path & unFichier.Name
                    lTailleMini = Len(sFichierMini)
                End If
            
            End If
        
        End If
    
    Next unFichier
    
    ' on doit avoir le fichier le plus petit ici, on ne le supprime qu'à partir du moment où on a trouvé 2 fichiers au moins.
    Kill sFichierMini

End Function

Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
2
J'ai oublié le test sur l'instruction Kill, il fallait lire

if lNbFichierTest > 1 then
Kill sFichierMini
End If