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 :
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#.
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); }
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
Partager