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

VBScript Discussion :

Problème pour récupérer la date de modification d'un fichier


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 652
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 652
    Billets dans le blog
    6
    Par défaut Problème pour récupérer la date de modification d'un fichier
    Bonjour,

    J'ai développé un script VBS qui va boucler un certain nombre de fois pour vérifier qu'un fichier bien spécifique est mis à jour régulièrement. (pour faire simple, ce script surveille le log d'un autre script pour vérifier qu'il est bien en cours d'exécution)

    A chaque itération, le script va comparer la date de modification du fichier scruté à celle de l'itération précédente. Si les 2 dates sont identique, ça envoie une alerte, sinon ça va attendre un certain nombre de minutes avant de passer à l'itération suivante.

    Pour récupérer la date de modification de mon fichier, j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set oFile = oFSO.GetFile(p_filename)
    last_date = CDate(oFile.DateLastModified)
    set oFile = Nothing
    Or, il arrive très régulièrement que la date récupérée par cette méthode ne soit pas la bonne, un peu comme s'il y avait un cache des propriétés.
    A 5 minutes d'intervalle, il va me dire que c'est la même date de modification, alors que le fichier aura été pourtant bien été modifié plusieurs fois (la date affichée dans l'explorateur de fichier, elle, est bonne après un "F5").

    J'ai voulu feinter en utilisant "Shell.Application" :
    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
    set oFile = oFSO.GetFile(p_filename)
     
    tmp_foldername = oFSO.GetParentFolderName(oFile)
    tmp_filename = oFSO.GetFileName(oFile)
     
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.NameSpace(tmp_foldername)
    Set objFolderItem = objFolder.ParseName(tmp_filename)
     
    last_date = objFolder.GetDetailsOf(objFolderItem, 3)
     
    Set objFolder = Nothing
    Set objFolderItem = Nothing 
    Set objShell = Nothing
    Set oFile = Nothing
    mais j'ai exactement le même problème.


    Existe-t-il un moyen de faire en sorte de ne pas utiliser la valeur "dans le cache" mais de vraiment aller récupérer la date de modification du fichier ?


    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Salut
    ce script surveille le log d'un autre script pour vérifier qu'il est bien en cours d'exécution
    Que donnerait la surveillance du dernier accès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    accest_date = objFolder.GetDetailsOf(objFolderItem, 5)
    Car le fichier à surveiller ne semble pas pour autant être modifié.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 652
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 652
    Billets dans le blog
    6
    Par défaut
    Je me suis mal exprimé :
    J'ai un programme qui tourne pendant environ 4 heures et qui alimente au fur et à mesure un fichier "mon_programme.log".

    Comme ce programme peut planter sans qu'on s'en rende compte (sauf à garder un oeil dessus), je veux pouvoir lancer en parallèle un script qui va vérifier toutes les 10 minutes que le fichier de log a bien été mis à jour. Si entre 2 vérifications, la date du fichier de log est toujours la même, c'est que le programme a planté, donc on lance une alerte.

    Normalement, à chaque fois que le programme écrit dans le log, ça met à jour la date de modification du fichier de log. Par contre, ça ne met pas à jour la date de "dernier accès" au fichier.


    Tout ça pour dire que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    accest_date = objFolder.GetDetailsOf(objFolderItem, 5)
    retournera une date encore plus ancienne que la date de modification (dans mon cas).
    J'ai beau écrire dans mon fichier de log, la date d'accès ne changera pas (elle ne change que quand je l'ouvre par l'explorateur de fichier).

    Par contre, quand j'écris dans le fichier de log, la date de modification change, mais pas à chaque fois.

  4. #4
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Salut

    On voit bien que tu décharges (Set sous_objet = Nothing) les sous-objets de l'objet oFSO;
    En fais tu autant avec l'objet oFSO?
    Si non, cela vaudrait peut être le coup d'essayer, et de le recréer à chaque fois que tu cherches à avoir l'information de la date de modification du fichier.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 652
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 652
    Billets dans le blog
    6
    Par défaut
    Je ne l'avais pas mis dans mon post, mais oui, je crée et set à Nothing mon objet oFSO à chaque itération de boucle.

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Je n'arrive pas à constater ton problème de cache, avec ce bout de code, sur un Windows 7 Pro 64 bits.
    C'est systématique ? Est tu sur de ne pas avoir un problème de structure/logique avec ton code ?

    Je re-enregistre le fichier à chaque msgbox.

    Code vbscript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    For compteur = 0 To 10
    	set oFile = oFSO.GetFile("fichertest.txt")
    	last_date = CDate(oFile.DateLastModified)
    	msgbox last_date
    	set oFile = Nothing
    Next

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/05/2017, 10h55
  2. [Batch] Récupérer la date de modification d'un fichier
    Par KuBi4K dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 18/06/2010, 11h16
  3. Réponses: 2
    Dernier message: 22/10/2009, 21h39
  4. Récupérer la date de modif d'un fichier
    Par Sensei.Dje dans le forum C
    Réponses: 1
    Dernier message: 04/01/2008, 10h57
  5. Réponses: 2
    Dernier message: 10/10/2006, 20h01

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