Rechercher le dossier le plus récent dans un dossier

Maelhia Messages postés 21 Date d'inscription vendredi 25 mars 2022 Statut Membre Dernière intervention 15 février 2023 - Modifié le 20 mai 2022 à 13:51
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 - 26 mai 2022 à 00:59
Bonjour à tous et à toutes !

Je code en Visual Basic sous Visual Studio.

Mon problème est le suivant :

J'ai un dossier de départ (folder) à l'intérieur duquel sont contenus des fichiers (files : .xlsx , .txt) et d'autres dossiers. J'aurais besoin de pouvoir trouver le dossier le plus récemment modifié contenu dans mon dossier de départ et de récupérer son nom.



Une petite image pour illustrer mon propos. Dans mon "DossierDepart" se trouvent les Dossiers "Maison", "Ecole" et "Boulot" et les fichiers "banque" et "texte1".
Je veux que mon programme me dise quel dossier parmi "Maison", "Ecole" ou "Boulot" est celui qui a été modifié le plus récemment et me renvoie son nom ou chemin d'accès.

J'ai un code qui me permet de faire ça avec les fichiers, mais il ne prend pas en compte les dossiers. J'ai essayé de chercher un peu mais je n'arrive pas à l'adapté aux dossiers.

Je vous mets mon code ci-dessous.
Si vous avez des idées ou des questions sur mon problème, n'hésitez pas à laisser un message !!
Merci

Function TrouverDernierDossierModif(str_dossierAChercher) As String
        'renvoie le dernier fichier modifié
        

        Dim chemin_Dossier_a_trouver As String
        Dim Str_Date As String
        Dim nom_Doc As String
        Dim Str_DateRec As String

        Dim objFso, Folder, oFold, File

        objFso = CreateObject("Scripting.FileSystemObject")
        oFold = objFso.GetFolder(str_dossierAChercher)

        nom_Doc = ""
        objFso = CreateObject("Scripting.FileSystemObject")
        oFold = objFso.GetFolder(str_dossierAChercher)
        Str_DateRec = "01/01/1970 00:00:37"

        'on parcourt tous les fichiers du dossier oFold 
        For Each File In oFold.Files

            'récupérer la date du fichier
            Str_Date = IO.Directory.GetLastWriteTime(str_dossierAChercher & File.Name)

            'si cette date est plus récente que celle du fichier précédent on met à jour et on enregistre le nom du fichier
            If Str_DateRec < Str_Date Then
                Str_DateRec = Str_Date
                nom_Doc = File.Name
            End If
        Next

        chemin_Dossier_a_trouver = str_dossierAChercher & nom_Doc
        Return chemin_Dossier_a_trouver
    End Function

2 réponses

Maelhia Messages postés 21 Date d'inscription vendredi 25 mars 2022 Statut Membre Dernière intervention 15 février 2023 1
20 mai 2022 à 14:29
J'ai trouvé une partie de ma réponse, alors je le poste ici au cas où quelqu'un d'autre en ait besoin :

Il faut utiliser "SubFolders" et "DateLastModified" . Ci-dessous mon code :

objFso = CreateObject("Scripting.FileSystemObject")
        oFold = objFso.GetFolder(str_dossierAChercher)
        oSFold = oFold.SubFolders
        Str_DateRec = "01/01/1970 00:00:37"

        'on parcourt tous les fichiers du dossier oFold 
        For Each Folder In oSFold
            MsgBox(Folder.Name)
            'récupérer la date du fichier
            Str_Date = Folder.DateLastModified

            'si cette date est plus récente que celle du fichier précédent on met à jour et on enregistre le nom du fichier
            If Str_DateRec < Str_Date Then
                Str_DateRec = Str_Date
                nom_Doc = Folder.Name
            End If
        Next
0
Maelhia Messages postés 21 Date d'inscription vendredi 25 mars 2022 Statut Membre Dernière intervention 15 février 2023 1
Modifié le 20 mai 2022 à 14:48
Donc, la suite de mon problème est que chacun de mes dossiers "Maison", "Ecole" et "Boulot" contiennent eux-mêmes plusieurs dossiers et c'est à l'intérieur de ces dossiers que je créé des fichiers word ou autre...

Sauf que si je modifie un sous-dossier, ça ne modifie pas la date du dossier dans lequel il est contenu.
Un petit exemple:

Dans le dossier "Maison" j'ai les dossiers "Cuisine" et "Chambre".
Si dans le dossier "Chambre" je créé un fichier texte, la date de dernière modification du dossier "Chambre" sera la même que la date de création de mon fichier texte. Mais la date de dernière modification du dossier "Maison" ne changera pas.

Savez-vous quelle date/fonction/subterfuge... je peux utiliser pour que la date de dernière modification de mon dossier "Maison" soit la date de dernière modification la plus récente de tous les fichiers contenus dans les sous-dossiers de "Chambre" et "Cuisine".

Y a-t-il une autre fonction que DateLastModified à utiliser?

Merci d'avance pour votre aide et vos idées
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
26 mai 2022 à 00:59
Bonjour
Vous dîtes : "Je code en Visual Basic sous Visual Studio"
Pourquoi avoir mis comme section VbScript ?
Si vous codez vraiment en VB Net la classe File conviendrait bien mieux pour les accès aux fichiers que CreateObject du FSO (File System Object) qui est maintenant plus que dépassé si vous utilisiez la dernière version de Visual Studio .
Concernant votre souci pour les dossiers ce que vous faîtes est erroné .
Lorsque le contenu d'un fichier .txt change le dossier dans lequel il se trouve ne change pas . Un dossier change si on y supprime des fichiers ou si on y ajoute des fichiers ou des sous-dossiers .
J'ai utilisé les mêmes termes que vous mais en informatique un dossier est un répertoire .
0
Rejoignez-nous