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

C# Discussion :

Trouver le dernier fichier créé


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut Trouver le dernier fichier créé
    Bonjour,

    J’explique mon projet.

    Afin de superviser des logs sur des serveurs, je dois développer une petite application qui copie en local le fichier de log pour pouvoir afficher son contenu dans un textbox Multiline.

    Mon code à cette tête
    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
     
    DirectoryInfo rep_log = new DirectoryInfo(Path_SRVC);
                    foreach (FileInfo NextFile in rep_log.GetFiles("*Log.*"))
                    {
    // obtenir le tps de creation  
                      DateTime tmp_file = NextFile.CreationTime; 
    // l’heure a l‘instant T de l’intérrogation                    
                      DateTime tmp_maintenant = DateTime.Now;
    // Calcul du temps écoulé depuis la création
                      TimeSpan tmp_diff = tmp_maintenant.Subtract(tmp_file);
    // Intérrogation du dernier fichier
                      if (tmp_diff.TotalMinutes < 20)
                      {
    // Construction du chemin du fichier source
                            fichier_du_jour = NextFile.DirectoryName+"\\"+ NextFile.Name;
    // Copie en local
                            File.Copy(fichier_du_jour, @"c:\log.temp",true);
                      }
                    }

    Actuellement mon programme fonctionne.

    Le problème est qu’il affiche le resultat au bout de 2 min 50 sec (autant faire la manip a la main)
    La raison est qu’il existe une multitude de fichier Log puisque le serveur en génère 4 par heure et qu’il garde un historique de 15 jours.

    Ce qui fait que mon foreach passe en revue 1440 fichiers Log.
    Je ne peux pas savoir exactement le nom de mon fichier puisque il est constitué de la manière suivante :
    [Hostname]Log.[N° alèatoire * Tps process]

    Donc je voulais savoir si il n’exitait pas une méthode plus rapide pour trouver mon dernier fichier généré ?

    Je me tiens a votre disposition pour plus d’info.
    Merci d’avance

    PS : Je suis un beau novice dans le domaine de la prog.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Salut,

    2mn50 ça me semble trés long pour une simple itération sur 1500 éléments. Tu as essayé d'affiner ton diagnostic pour savoir ce qui prend du temps exactement ? Par exemple celon la taille du fichier à copier et la capacité de ton réseau, c'est peut être la copie qui prend du temps.

    Autre chose, tu dis que le serveur génère 4 fichiers de logs par heure, est ce que c'est régulier ? Si oui alors il génère un fichier toute les 15 minutes et je ne comprends pas ta clause "if (tmp_diff.TotalMinutes < 20)" qui va forcemment te faire récupérer 2 fichiers. Si la génération du fichier n'est pas régulière alors c'est pire puisque tu peux récupérer plus de deux fichiers voir même aucun .
    Le mieux pour récupérer le dernier fichier généré est surement de récupérer celui qui a la date de création la plus grande tout simplement.

  3. #3
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Tu as essayé d'affiner ton diagnostic pour savoir ce qui prend du temps exactement ?
    J'ai effectivement recherché ce qu'il me prends le plus de temps et ce n'est pas l'établissement du partage puisque ce dernier prends environs 20 secondes.

    Il s'agit bien de l'intérrogation de mes 1400 fichiers.

    Enfin je le suppose puisque je ne sais pas vraiment comment le vérifier.
    Perso j'ai fais des test de la manière suivante.
    Dès l'établissement du partage affichage du contenu.(SI ok on avance le prog )
    Dès le foreach est terminé affichage des noms fichiers trouvé. (mon problème est peut être là puisque j'attends d'avoir fini mon foreach pour afficher le résultat)


    ... un fichier toute les 15 minutes et je ne comprends pas ta clause "if (tmp_diff.TotalMinutes < 20)" qui va forcemment te faire récupérer 2 fichiers.
    Les fichiers sont bien tout les 15 mintutes mais j'obtiens bien un seul nom de fichier.


    ...la taille du fichier à copier...
    Le fichier pèse 18 Ko donc la copie est fluide.

    Mon problème est vraiment trouver le bon fichier.

    Comment trouver le fichier
    qui a la date de création la plus grande tout simplement.
    ?

  4. #4
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 15
    Par défaut
    C'est normal de ne recuperer qu'un fichier...
    Tu dois en recuperer au min 1, au max, 2..., dans un délai de 20 minutes.
    Faut mettre 30 si tu veux etre certain d'en avoir 2...
    Après ca doit être plus simple, pour comparer ces 2 fichiers... Et encore plus si t'en as qu'un...

  5. #5
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Donc cette partie est juste puisque j'en ai besoin que d'un seul mais celà est assez simple a réglé si je rencontrais un problème de ce type.

    Mon problème est vraiment sur ces 2min 50

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Au temps pour moi, 20 minutes c'est bon pour ne récupérer qu'un seul fichier.

    Pour continuer de debugger, si tu mets un point d'arret sur "File.Copy(fichier_du_jour, @"c:\log.temp",true);" , est-ce que tu ne passes qu'une seule fois dessus ?

    Tu peux aussi utiliser la classe StopWatch de .net pour mesurer le temps passé dans certains endroit de ton code, tu pourrais regarder la proportion de temps passée à faire des caclul sur le temps et celle passée à copier le fichier par exemple.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment trouver la dernière date de modification d'un fichier
    Par je®ome dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 24/05/2006, 13h23
  2. [D7 & Excel]Peut-on trouver la derniere ligne du fichier
    Par Isa31 dans le forum API, COM et SDKs
    Réponses: 17
    Dernier message: 14/03/2006, 10h52
  3. [dézipper]Trouver si un fichier a 1 accent dans un zip
    Par joseph_p dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 29/12/2005, 08h42
  4. Trouver ou un fichier est lancé
    Par schnourf dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 21/10/2005, 14h50
  5. Trouver le dernier enregistrement d'une table
    Par remi59 dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/03/2003, 14h54

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