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 :

taille et modification DANS un repertoire


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut taille et modification DANS un repertoire
    Bonjour,
    Je bute sur un problemeVB 2008 NET
    je dois faire une petite application qui détecte la fin d'ajout de fichier dans dans un répertoire.
    une application extérieur ecrit toute les 10 secondes un nouveau fichier dans un repertoire. Je doit détecter quand cette application extérieure a finit d'écrire dans ce repertoire.
    actuelement, j'utilise un control timer qui calcul toute les 5 secondes le poids en octets du répertoire. Si après environ 10 secondes, le poids du répertoire n'a pas changé, un message doit etre affiché à l'ecran.
    pour résumer :

    toutes les 5 secondes : poids_repertoire = x
    if x = Y then mesagebox (stop)
    y = x
    if faut qu'après le test "x = y", y prennes la valeur de x de facon a etre détecter pendant le test suivant.

    quelqu'un peut-il m'aider à regler ce probleme ?

    merci.

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 401
    Par défaut
    regarde du coté de System.IO.FileSystemWatcher
    Permet de surveiller les fichiers d'un répertoire, création, suppr, modif.


    Voici un vieux code écrit par un stagiaire mais qui a fonctionnait, enfin je crois !
    c'est juste pour te donner une idée mais vaudrait mieux recorriger le code.

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
     
    Public Class cls_Surveillance_Dossier
        Private Surveillance As System.IO.FileSystemWatcher = Nothing
        Private MyDossierSurveillé As String = ""
        Private MyDossierDesLogs As String = ""
        Private Now_DernierMessage As String = ""
        Private Date_Maintenant As String = ""
     
        Sub New()
     
        End Sub
     
        Sub New(ByVal UnDossierSurveillé As String, ByVal UnDossierLog As String)
            ActiveConfiguration(UnDossierSurveillé, UnDossierLog)
        End Sub
     
        Public Sub ActiveConfiguration(ByVal UnDossierSurveillé As String, ByVal UnDossierLog As String)
            If DossierSurveillé = UnDossierLog Then
                Err.Raise(1976, "Constructueur de la class cls_Surveille_Dossier", "Le dossier de surveillance ne peut pas être identique à celui du stockage du log.")
            Else
                If System.IO.Directory.Exists(UnDossierSurveillé) Then
                    MyDossierSurveillé = DossierSurveillé
     
                    If System.IO.Directory.Exists(UnDossierLog) Then
                        MyDossierDesLogs = UnDossierLog
     
                        Surveillance = New System.IO.FileSystemWatcher()
     
                        'Dossier Surveillé
                        Surveillance.Path = DossierSurveillé
     
                        'Propriétés Surveillées
                        Surveillance.NotifyFilter = System.IO.NotifyFilters.Attributes _
                        Or System.IO.NotifyFilters.CreationTime _
                        Or System.IO.NotifyFilters.DirectoryName _
                        Or System.IO.NotifyFilters.FileName _
                        Or System.IO.NotifyFilters.LastAccess _
                        Or System.IO.NotifyFilters.LastWrite _
                        Or System.IO.NotifyFilters.Security
     
                        'Evenements qui seront déclenchés
                        AddHandler Surveillance.Changed, AddressOf OnChanged
                        AddHandler Surveillance.Created, AddressOf OnCreated
                        AddHandler Surveillance.Deleted, AddressOf OnDeleted
                        AddHandler Surveillance.Renamed, AddressOf OnRenamed
                    Else
                        Err.Raise(1977, "Constructueur de la class cls_Surveille_Dossier", "Le dossier spécifié pour le stocke du log n'existe pas")
                    End If
                Else
                    Err.Raise(1978, "Constructueur de la class cls_Surveille_Dossier", "Le dossier qui doit être surveillé n'existe pas où ne se trouve pas à l'endroit spécifié")
                End If
            End If
        End Sub
     
        Public Sub ActiveConfiguration()
            If MyDossierSurveillé = MyDossierDesLogs Then
                Err.Raise(1976, "Constructueur de la class cls_Surveille_Dossier", "Le dossier de surveillance ne peut pas être identique à celui du stockage du log.")
            Else
                If System.IO.Directory.Exists(MyDossierSurveillé) Then
     
                    If System.IO.Directory.Exists(MyDossierDesLogs) Then
     
                        Surveillance = New System.IO.FileSystemWatcher()
     
                        'Dossier Surveillé
                        Surveillance.Path = MyDossierSurveillé
     
                        'Propriétés Surveillées
                        Surveillance.NotifyFilter = System.IO.NotifyFilters.Attributes _
                        Or System.IO.NotifyFilters.CreationTime _
                        Or System.IO.NotifyFilters.DirectoryName _
                        Or System.IO.NotifyFilters.FileName _
                        Or System.IO.NotifyFilters.LastAccess _
                        Or System.IO.NotifyFilters.LastWrite _
                        Or System.IO.NotifyFilters.Security
     
                        'Evenements qui seront déclenchés
                        AddHandler Surveillance.Changed, AddressOf OnChanged
                        AddHandler Surveillance.Created, AddressOf OnCreated
                        AddHandler Surveillance.Deleted, AddressOf OnDeleted
                        AddHandler Surveillance.Renamed, AddressOf OnRenamed
                    Else
                        Err.Raise(1977, "Constructueur de la class cls_Surveille_Dossier", "Le dossier spécifié pour le stocke du log n'existe pas")
                    End If
                Else
                    Err.Raise(1978, "Constructueur de la class cls_Surveille_Dossier", "Le dossier qui doit être surveillé n'existe pas où ne se trouve pas à l'endroit spécifié")
                End If
            End If
        End Sub
     
        Public Property DossierSurveillé() As String
            Get
                Return MyDossierSurveillé
            End Get
            Set(ByVal value As String)
                MyDossierSurveillé = value
            End Set
        End Property
     
        Public Property DossierDesLogs() As String
            Get
                Return MyDossierDesLogs
            End Get
            Set(ByVal value As String)
                MyDossierDesLogs = value
            End Set
        End Property
     
        Public Function IsActiver() As Boolean
            Return Surveillance.EnableRaisingEvents
        End Function
     
        Public Sub Activer()
            Surveillance.EnableRaisingEvents = True
        End Sub
     
        Public Sub Stopper()
            Surveillance.EnableRaisingEvents = False
        End Sub
     
        Private Sub OnChanged(ByVal source As Object, ByVal e As System.IO.FileSystemEventArgs)
            Log("Modifié : """ & e.Name & "" & IIf(My.User.Name = "", "", " par " & My.User.Name))
        End Sub
     
        Private Sub OnCreated(ByVal source As Object, ByVal e As System.IO.FileSystemEventArgs)
            Log("Créé : """ & e.Name & "" & IIf(My.User.Name = "", "", " par " & My.User.Name))
        End Sub
     
        Private Sub OnDeleted(ByVal source As Object, ByVal e As System.IO.FileSystemEventArgs)
            Log("Supprimé : """ & e.Name & "" & IIf(My.User.Name = "", "", " par " & My.User.Name))
        End Sub
     
        Private Sub OnRenamed(ByVal source As Object, ByVal e As System.IO.RenamedEventArgs)
            Log("Renommé : """ & e.Name & "" & IIf(My.User.Name = "", "", " par " & My.User.Name))
        End Sub
     
        Private Sub Log(ByVal Texte As String)
            Date_Maintenant = Now.ToString
     
            If Not Now_DernierMessage = Date_Maintenant Then
                Now_DernierMessage = Date_Maintenant
                Texte = vbCrLf & Date_Maintenant & "  -->  " & Texte
                My.Computer.FileSystem.WriteAllText(MyDossierDesLogs & "\" & New System.IO.DirectoryInfo(MyDossierSurveillé).Name & ".Log", Texte, True)
            End If
        End Sub
    End Class

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    je comprends pas trop ton problème

    sinon en mieux il y a le filesystemwatcher qui te prévient quand il y a une modification dans un dossier
    et ensuite tu peux essayer tous les x secondes d'ouvrir le fichier en accès exclusif, si ca passe c'est que le fichier est fini d'écrire
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Par défaut
    j'ai essayé le filesystemwatcher, il va me servir, mais en fait je veux détecter quand il n'y a plus d'écriture dans le repertoire.
    merci.

  5. #5
    Membre expérimenté Avatar de anonymousse
    Profil pro
    Inscrit en
    Février 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 130
    Par défaut
    bonjour,

    code posté par Scifire en 2007 lien :

    http://www.developpez.net/forums/d25...re-disque-dur/

    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
        Public Shared Function DirSize(ByVal d As DirectoryInfo) As Long
            Dim Size As Long = 0
            ' File sizes
            Dim fis As FileInfo() = d.GetFiles()
            Dim fi As FileInfo
            For Each fi In fis
                Size += fi.Length
            Next fi
            ' Subdirectory sizes
            Dim dis As DirectoryInfo() = d.GetDirectories()
            Dim di As DirectoryInfo
            For Each di In dis
                Size += DirSize(di)
            Next di
            Return Size
        End Function
    tu peux aussi décompter les fichiers (peut-être plus rapide)

    sinon, méfies-toi dans les valeurs de timer, ça peut te créer des erreurs si tu utilises des valeurs multiples (ex 5s pour les 10s), vaut mieux par ex 3 ou 7 pour 10 (à vérifier quand même !).

    bon code
    mousse

Discussions similaires

  1. Modifier la taille, la couleur ... dans un label
    Par Guigui_ dans le forum GTK+ avec Python
    Réponses: 3
    Dernier message: 15/07/2004, 17h09
  2. [JDialog] Modification dans une fenêtre
    Par cefabien dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 01/10/2003, 13h18
  3. [Débutant] Modifs dans Delphi
    Par J-P-B dans le forum XMLRAD
    Réponses: 6
    Dernier message: 20/06/2003, 15h55
  4. Taille des tabulations dans un TMemo ?
    Par dergen dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/01/2003, 19h38
  5. taille du texte dans un viewport
    Par pitounette dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/07/2002, 12h06

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