Page 1 sur 1

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

Posté : mer. 06 juil. 2011 17:16
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

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

Posté : mer. 06 juil. 2011 17:19
par SurPriseS

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

Posté : mer. 06 juil. 2011 17:54
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.

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

Posté : mer. 06 juil. 2011 18:00
par SurPriseS
Désolé :oops: j'ai pas toujours le reflex optimisation :oops:

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

Posté : mer. 06 juil. 2011 18:16
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")

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

Posté : mer. 06 juil. 2011 21:13
par matwachich
@NDS: n'oublie pas le FileClose sur le handle

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

Posté : jeu. 07 juil. 2011 09:09
par brice59
matwachich a écrit :@NDS: n'oublie pas le FileClose sur le handle

c'est à dire ???

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

Posté : jeu. 07 juil. 2011 11:30
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.

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

Posté : jeu. 07 juil. 2011 14:57
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