[..] Contrôler si un dossier contient des fichiers

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
brice59
Niveau 3
Niveau 3
Messages : 33
Enregistré le : lun. 27 juin 2011 16:08
Status : Hors ligne

[..] Contrôler si un dossier contient des fichiers

#1

Message par brice59 »

Salut,

Pourriez me dire si il y a un code pour aller chercher dans un dossier s'il y a au moins un fichier avec en réponse = oui / non

Merci
SurPriseS
Niveau 6
Niveau 6
Messages : 293
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] controler si un dossier contient des fichiers

#2

Message par SurPriseS »

Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] controler si un dossier contient des fichiers

#3

Message par ZDS »

Bonjour,

Inutile de prendre un rouleau compresseur pour écraser une mouche, lister les fichiers pour savoir si il existe des fichiers relève de la consommation volontaire de ressources pour pas grand chose ^^
Voici une fonction toute simple qui devrait faire ce que tu demandes :

Code : Tout sélectionner

Func emptyFolder($folder)
    Local $result, $empty
    If FileExists($folder&"\") = 0 Then
        SetError(1) ; Folder not found
    Else
        $result = FileFindFirstFile($folder&"\"&"*")
        $empty = ($result = -1 Or @error)
        If $result <> -1 Then FileClose($result)
        Return $empty
    EndIf
EndFunc
Succès : Retourne True si le répertoire est vide, False sinon
Echec : Met @error à 1 si le répertoire n'existe pas
Remarques : Le nom du dossier ne doit pas contenir de backslash final - exemple : "C:\Test" et non pas "C:\Test\"

A bientôt !

PS : Dans ton cas, tu veux savoir si le dossier contient au moins un fichier. Soit tu fais un Not emptyFolder($folder) dans le reste du script, soit tu changes le nom de la fonction et le Return [...] en Return Not [...]. La seconde solution est plus logique car dans le cas de la première avec d'une erreur, tu aurais le flag @error à 1 et pourtant un résultat à True (qui induirait que le dossier n'existe pas et qu'il contient des fichiers, une erreur d'algo à la Microsoft Office quoi, genre "Erreur : Aucune erreur détectée" ^^).

EDIT: Modification effectue pour fermer le handle avant de retourner le résultat.
Modifié en dernier par ZDS le jeu. 07 juil. 2011 11:49, modifié 2 fois.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
SurPriseS
Niveau 6
Niveau 6
Messages : 293
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] controler si un dossier contient des fichiers

#4

Message par SurPriseS »

Désolé :oops: j'ai pas toujours le reflex optimisation :oops:
brice59
Niveau 3
Niveau 3
Messages : 33
Enregistré le : lun. 27 juin 2011 16:08
Status : Hors ligne

Re: [..] controler si un dossier contient des fichiers

#5

Message par brice59 »

Peut-on si le dossier contient effectivement des dossiers ajouter la fonction

Code : Tout sélectionner

MsgBox(4,"document à traiter","Voulez vous les traiter maintent ?")
puis en fonction de la réponse (oui/non) lancer la commande ci-dessous (Je ne sais pas comment fonctionne le "array", j'imagine qu'il peut permettre d'ouvrir un fichier de la liste qu'il propose... je cherche

Code : Tout sélectionner

#include<Array.au3>
#include"RecFileListToArray.au3"
$ar_Array = _RecFileListToArray ("C:\", "*.odt;*.doc", 0, 0, 2, 1, "Temp")
_Array ???????($ar_Array, "Liste fichier")
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] controler si un dossier contient des fichiers

#6

Message par matwachich »

@NDS: n'oublie pas le FileClose sur le handle
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
brice59
Niveau 3
Niveau 3
Messages : 33
Enregistré le : lun. 27 juin 2011 16:08
Status : Hors ligne

Re: [..] controler si un dossier contient des fichiers

#7

Message par brice59 »

matwachich a écrit :@NDS: n'oublie pas le FileClose sur le handle

c'est à dire ???
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] controler si un dossier contient des fichiers

#8

Message par GaRydelaMer »

Bonjour

je vous propose cette fonction pour connaitre si un dossier est vide ou pas, je part du principe que 1 dossier qui existe pas est vide:

Code : Tout sélectionner

Func Is_EmptyFolder($Path)
    Local $FSO = ObjCreate("Scripting.FileSystemObject")
    If Not $FSO.FolderExists($Path) Then Return SetError(1, 1, True)

    Local $Folder = $FSO.GetFolder($Path)
    If $Folder.SubFolders.Count = 0 And $Folder.Files.Count = 0 Then Return True

    Return False
EndFunc
Elle retourne Vrai si le dossier ne contient ni Fichier et/ou SousDossier ou si le dossier n'existe pas en mettant tout de même @error à 1, sinon elle retourne False.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] controler si un dossier contient des fichiers

#9

Message par Tlem »

Techniquement parlant, si un dossier et/ou ses sous dossiers son vides, il n'y a aucune information intéressante à récupérer et donc un simple :

Code : Tout sélectionner

DirGetSize("C:\Dossier")
suffit largement.

Ceci dit, si il faut connaitre les éventuels dossiers et/ou fichiers vide qui pourraient s'y trouver, ceci suffit :

Code : Tout sélectionner

$array = DirGetSize("C:\Dossier", 1)
$array[0] = Size
$array[1] = Files count
$array[2] = Dirs Count
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre