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 :

Lister les fichiers d'un répertoire en fonction de la date de création contenant un mot clé [Débutant]


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Lister les fichiers d'un répertoire en fonction de la date de création contenant un mot clé
    Bonjour,

    Après presque 5 ans sans pratique du C#, je doit m'y remettre pour mon client. Je dois lui développer une application permettant de livrer des package SSIS depuis TFS sur ses différents serveur MSSQL.

    Cette application doit récupérer le fichier de log généré au moment de la livraison, l'inconvénient, c'est que tous les fichiers de logs sont généré dans le même folder et que donc pour récupérer le dernier je doit les trier par date, une autre difficulté vient s'ajouter, je peux avoir plusieurs fichiers de log pour la même livraison si jamais les précédentes ont échouée, le format du nom de ce fichier de log est :
    log_livraison_ DoublonIsinParam1.0.0_UAT_20160615_165137_UAT0001885.log

    Ma demande doit donc me permettre de récupérer le dernier fichier de log de la livraison de la RFC UAT0001885, a titre d'information j'en ai a ce jour 4 dans mon dossier.

    Mon problème et que je n'arrive pas à récupérer le nom de ce fichier afin de l'ouvrir directement avec notepad lorsque je clique sur le bouton de mon application.

    je vous joint mon 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
    private void button_log_Click(object sender, RoutedEventArgs e)
            {
                PowerShell ps = PowerShell.Create();
                Runspace runSpace = RunspaceFactory.CreateRunspace();
                runSpace.Open();
                Pipeline pipeline = runSpace.CreatePipeline();
                string ref_rfc = textbox_rfc.Text;
                string appli = textbox_appli.Text;
                string log_path = "";
                string lieu = "";
                if(textbox_rfc.Text.StartsWith ("MEP"))
                    {
                        lieu = "PRD\\";
                    }
                else if (textbox_rfc.Text.StartsWith ("UAT"))
                    {
                        lieu = "UAT\\"; 
                    }
                else
                    {
                        lieu = "TST\\";
                    }
                log_path = @"\\nom_server\" + lieu + appli;
                Command getchilditem = new Command("Get-ChildItem");
                Command sort = new Command("Sort-Object");
                Command select = new Command("Select-Object");
                getchilditem.Parameters.Add("path",log_path);
                getchilditem.Parameters.Add("recurse");
                getchilditem.Parameters.Add("Include", "*ref_rfc*");
                sort.Parameters.Add("Property", "CreationTime");
                select.Parameters.Add("Last",1);
                pipeline.Commands.Add(getchilditem);
                pipeline.Commands.Add(sort);
                pipeline.Commands.Add(select);
                Collection<PSObject> arguments = pipeline.Invoke();
     
     
                //string[] arguments;
                //arguments= Directory.GetFiles(log_path, "*ref_rfc*", SearchOption.AllDirectories);
     
                DirectoryInfo dir = new DirectoryInfo(log_path);
     
                FileInfo[] files = dir.GetFiles().OrderByDescending(p => p.CreationTime).ToArray();
     
                Process proc = new Process();
                ProcessStartInfo processStarInf = new ProcessStartInfo();
                processStarInf.FileName = "notepad.exe";
                processStarInf.Arguments = log_path +"\\"+files[0].ToString();
     
                processStarInf.WindowStyle = ProcessWindowStyle.Maximized;
                proc = Process.Start(processStarInf);
     
            }
    Je laisse volontairement les différentes méthodes que j'ai essayé, pour la partie PowerShell, il faut savoir que cette application était à l'origine développé en PS, mais la demande du client est d'avoir une application en C#.

    Voilà je m'en remet à vous après 2 jours de recherche sur le net et de test infructueux je désespère un peu.
    EDIT : J'arrive a récupérer le tout dernier fichier généré mais ce n'est pas celui que je cherche, et je n'arrive pas a définir un filtre de recherche.
    Merci d'avance,
    Mitakue

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Salut

    il me semble que la méthode Getfiles() a une surcharge avec un filtre à y mettre

    Si tu connais le nom de ton fichier (ou bien ce qu'il doit contenir dans son nom, genre "*LaDateDuJour*.txt", tu pourras appliquer ce filtre et donc obtenir
    un résultat si le répertoire contient ce que tu recherches
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Salut,

    Merci pour ta réponse. Je cherche justement cette surcharge dont tu parle, je sais sur quel paramètre je doit faire mon filtre mais je n'y arrive pas ^^.

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    string search = "ma*.dll";
                DirectoryInfo dir = new DirectoryInfo(@"c:\Windows\System32");
                FileInfo[] files = dir.GetFiles(search);
                foreach (FileInfo info in files)
                {
                    Trace.WriteLine(info.Name);
                }
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Merci,

    J'ai quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      DirectoryInfo dir = new DirectoryInfo(log_path);
              string pattern = (ref_rfc);
               // FileInfo[] files = dir.GetFiles().OrderByDescending(p => p.LastWriteTime).ToArray();
                FileInfo[] files = dir.GetFiles("*"+ pattern + "+").OrderByDescending(p => p.LastWriteTime).ToArray();
                Process proc = new Process();
                ProcessStartInfo processStarInf = new ProcessStartInfo();
                processStarInf.FileName = "notepad.exe";
                processStarInf.Arguments = log_path +"\\"+files[0].ToString();
                //processStarInf.Arguments = 
     
                processStarInf.WindowStyle = ProcessWindowStyle.Maximized;
                proc = Process.Start(processStarInf);
    Mais lors de l'exécution j'ai un IndexOutOfRange.

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    faut vérifier que la liste de fichiers retournée par le GetFiles n'est pas null (si il n'y a pas de fichier trouvé, tu vas faire un File[0] et forcément, il n'y a rien
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Je me doute bien mais le soucis c'est que je suis certains qu'il y a un fichier dont le nom contient la valeur stockée dans ma variable pattern ^^.
    Je fais mes tests en conséquence :p

  8. #8
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    "*"+ pattern + "+"

    ca serait pas plutôt :

    "*"+ pattern + "*"

    (étoiles avant et après)
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Je suis vraiment trop stupide ^^, après deux jours on voit plus grand chose. C'était bien ça :p.

    Je te remercie. Je reviendrais surement sur le forum car la transcription PowerShell vers C# est loin d'être terminée.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/10/2016, 19h56
  2. [C++/Unix] Lister les fichiers d'un répertoire
    Par bouazza92 dans le forum Linux
    Réponses: 5
    Dernier message: 10/12/2013, 22h07
  3. Réponses: 4
    Dernier message: 31/08/2009, 17h17
  4. Réponses: 1
    Dernier message: 25/02/2009, 09h44
  5. [CF][PPC/C#] Comment lister les fichiers d'un répertoire ?
    Par dady dans le forum Windows Mobile
    Réponses: 18
    Dernier message: 20/05/2005, 14h35

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