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

VB.NET Discussion :

Problème pour trier les fichiers d'un dossier par date


Sujet :

VB.NET

  1. #1
    Membre régulier Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Points : 83
    Points
    83
    Par défaut Problème pour trier les fichiers d'un dossier par date
    Bonjour,

    voilà, je cherche le moyen de supprimer tout le contenu d'un dossier, sauf le dernier fichier ajouté dedans. Ceci, en me basant sur la date de création du fichier.
    Donc j'ai bien trouvé le code pour lister tous mes fichiers et les effacer tous, mais j'aimerais pouvoir trier la liste des fichiers trouvés par ordre décroissant de date de création et les effacer tous sauf le premier (ou l'inverse par date de création, sauf le dernier).
    j'ai vu qu'il existe dans GetFiles une fonction ".OrderByDescending" mais impossible de comprendre comment cela fonctionne.
    J'ai cherché sur le forum et sur google mais je ne comprend pas les exemples donnés...

    Pouvez-vous m'aider ?

    Voici mon code actuel :

    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
    Private Function Dossier_Supprimer_Contenu() As String
    		Dim strProcessError As String = ""
    		Dim urlDossier As String = "D:\monsite\upload"
    		Try
    			If System.IO.Directory.Exists(urlDossier) Then
    				Dim files = From file In Directory.GetFiles(urlDossier)
    				For Each file In files
    					If System.IO.File.Exists(file) Then
    						System.IO.File.Delete(file)
    					End If
    				Next
    				files = Nothing
    			End If
    		Catch ex As Exception
    			strProcessError = "<br><span style='color:#FF0000;'>Erreur : " & ex.Message & "</span>"
    		End Try
    		Return strProcessError
    	End Function

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Bonjour,

    dans les propriétés de tes objets FileInfo, tu as notamment CreationDate qui te renvoie la date de création du fichier.
    Plusieurs approches sont possibles :
    - En déterminant la date la plus récente de tous les fichiers du répertoire, tu peux supprimer tous les fichiers dont la date de création n'est pas cette valeur max.
    - En ayant trié par CreationDate descendante les fichiers du répertoire, tu peux supprimer tous les fichiers sauf le premier de la liste ordonnée.

  3. #3
    Membre régulier Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Points : 83
    Points
    83
    Par défaut
    Merci pour ta réponse.
    Ta deuxième méthode serait celle que je cherche à faire.

    Mais pour trier sur creationDate, me faut-il faire un traitement avant la suppression pour trier justement, .. ou bien est-il possible de le faire en une ligne en agissant sur mon objet FILES ou bien lors de l'appel de getFiles() ?

  4. #4
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Essaye quelque chose commme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    			If System.IO.Directory.Exists(urlDossier) Then
    				Dim files = From file In Directory.GetFiles(urlDossier) Order By file.CreationDate Descending
    				For i as Integer = 1 to files.Count
    					If System.IO.File.Exists(files[i]) Then
    						System.IO.File.Delete(files[i])
    					End If
    				Next
    à corriger, longtemps que je n'ai pas fait du VB.
    Le principe :
    - tri descendant des fichiers par date de création
    - boucle sur tous les fichiers sauf le premier (index 0) pour suppression

  5. #5
    Membre régulier Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Points : 83
    Points
    83
    Par défaut
    Merci pour ton aide.

    Il ne me veut pas le Order By file.CreationDate Descending.

    Il me met une erreur sur file.CreationDate : 'CreationDate' n'est pas une membre de 'String'

  6. #6
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim files = From file In Directory.GetFiles(urlDossier).Cast(Of IO.FileInfo)() Order By file.CreationTime Descending Select file

  7. #7
    Membre régulier Avatar de Stephane_br
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Points : 83
    Points
    83
    Par défaut
    Merci une nouvelle fois.
    Par contre il ne me le veut toujours pas...
    En effet, il ne me reconnait plus l'objet 'file' en tant que string maintenant.
    J'ai l'impression qu'au lieu de contenir les chemins des fichiers, mon tableau contient les dates de créations des fichiers.... Arf !

    J'ai trouvé une parade à la 'MacGyver' lol en faisant comme ci-dessous. Mais je le fait car je sais que je n'ai pas beaucoup de fichiers dans le dossier, sinon, j'imagine que cela ralentirait beaucoup mon script.... je dois proposer quelque chose de fonctionnel rapidement alors.... mais je ne déspespère pas de comprendre comment faire ceci "proprement"

    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
    35
    Private Function Dossier_Supprimer_Contenu() As String
    		Dim strProcessError As String = ""
    		Dim date1 As Date
    		Dim dateMax As Date = CDate("01/01/1998 00:00:00")
    		Dim urlDossier As String = "D:\monsite\upload"
    		Try
    			If System.IO.Directory.Exists(urlDossier) Then
    				Dim files = From file In Directory.GetFiles(urlDossier)
    				For Each file1 In files
    					If System.IO.File.Exists(file1) Then
    						date1 = System.IO.File.GetLastWriteTime(file1)
    						If date1 > dateMax Then
    							dateMax = date1
    						End If
    					End If
    				Next
    				For Each file2 In files
    					If System.IO.File.Exists(file2) Then
    						date1 = System.IO.File.GetLastWriteTime(file2)
    						If date1 < dateMax Then
    							System.IO.File.Delete(file2)
    						Else
    						End If
    					End If
    				Next
    				files = Nothing
    				strProcessError = strProcessError & "<br>Opération réussie !"
    			Else
    				strProcessError = strProcessError & "<br><span style='color:#FF0000;'>Erreur : Dossier introuvable !</span>"
    			End If
    		Catch ex As Exception
    			strProcessError = strProcessError & "<br><span style='color:#FF0000;'>Erreur : " & ex.Message & "</span>"
    		End Try
    		Return strProcessError
    	End Function

  8. #8
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Déjà, même si en effet ton traitement pour devenir long, c'est une bonne chose que tu aies raisonné autrement ET trouvé une solution.

    Cette fois-ci j'ai testé et ma variable files contient bien une liste de FileInfo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    If System.IO.Directory.Exists(urlDossier) Then
    Dim files = From f In New DirectoryInfo(urlDossier).GetFiles().Cast(Of IO.FileInfo)() Order By f.CreationTime Descending Select f
    For i As Integer = 1 To files.Count()-1
    If System.IO.File.Exists(files(i)) Then
    System.IO.File.Delete(files(i))
    End If
    Next

Discussions similaires

  1. Problème pour lister les fichiers d'in JAR
    Par Micke7 dans le forum Langage
    Réponses: 4
    Dernier message: 25/02/2011, 11h21
  2. Trier les fichiers d'un répertoire par date
    Par rouliane dans le forum Général Python
    Réponses: 7
    Dernier message: 02/08/2009, 17h26
  3. Problème pour lancer les fichiers .m sous Vista
    Par Henry22 dans le forum Octave
    Réponses: 1
    Dernier message: 25/04/2009, 23h49
  4. Problème pour lister les fichiers d'un répertoire
    Par Vitaly dans le forum Applets
    Réponses: 17
    Dernier message: 21/08/2007, 00h49
  5. [DisplayTag] Problème pour trier les dates dans un tableau
    Par Pascale38 dans le forum Taglibs
    Réponses: 13
    Dernier message: 01/09/2006, 09h58

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