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 :

Récupérer ce qui est écrit dans la console dans un fichier texte


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 21
    Par défaut Récupérer ce qui est écrit dans la console dans un fichier texte
    Bonjour,
    J'aimerais créer un fichier texte qui contient tout ce qui est écrit dans la console quand j'exécute le code suivant :
    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
    using System;
    using System.Diagnostics;
    using System.Linq;
    using System.Reflection;
    using System.Runtime.InteropServices;
    using Outlook = Microsoft.Office.Interop.Outlook;
     
    namespace OutlookAddIn1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Sample sample = new Sample();
                sample.EnumerateFoldersInDefaultStore();
     
                Console.WriteLine();
                Console.WriteLine("Fin du programme. Taper n'importe quelle touche pour quitter...");
                Console.ReadKey();
            }
        }
     
        class Sample
        {
            Outlook.Application GetApplicationObject()
            {
     
                Outlook.Application application = null;
     
                // Check whether there is an Outlook process running.
                if (Process.GetProcessesByName("OUTLOOK").Count() > 0)
                {
     
                    // If so, use the GetActiveObject method to obtain the process and cast it to an Application object.
                    application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
                }
                else
                {
     
                    // If not, create a new instance of Outlook and sign in to the default profile.
                    application = new Outlook.Application();
                    Outlook.NameSpace nameSpace = application.GetNamespace("MAPI");
                    nameSpace.Logon("", "", Missing.Value, Missing.Value);
                    nameSpace = null;
                }
     
                // Return the Outlook Application object.
                return application;
            }
            public void EnumerateFoldersInDefaultStore()
            {
                Outlook.Application application = GetApplicationObject();
     
                Outlook.Folder root =
                    application.Session.
                    DefaultStore.GetRootFolder() as Outlook.Folder;
                EnumerateFolders(root);
            }
     
            // Uses recursion to enumerate Outlook subfolders.
            private void EnumerateFolders(Outlook.Folder folder)
            {
                Outlook.Folders childFolders =
                    folder.Folders;
                if (childFolders.Count > 0)
                {
                    foreach (Outlook.Folder childFolder in childFolders)
                    {
                        // Write the folder path.
                        Debug.WriteLine(childFolder.FolderPath);
                        Console.WriteLine(childFolder.FolderPath);
                        // Call EnumerateFolders using childFolder.
                        EnumerateFolders(childFolder);
                    }
                }
            }
     
        }
    }
    Quelqu'un sait comment faire ?

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 974
    Par défaut
    Si ton but est uniquement de récupérer ce qui s'inscrit dans la console, il suffit de lancer ton programme depuis l'invite de commande et de rediriger la sortie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cd C:\Users\popo\Documents\Visual Studio 2019\Projects\TestConsole\TestConsole\bin\Debug
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TestConsole.exe > output.txt
    Avec mon programme console
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    using System;
     
    namespace TestConsole
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello world !");
            }
        }
    }

    Le résultat du fichier output.txt est le suivant :

  3. #3
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Pour rediriger un processus généralement on utilise RedirectStandardOutput = True de la classe Process (je l'utilise dans un de mes projets) mais là dans ton cas il faudra récupérer le handle du processus Outlook qui est déjà en cours d'exécution...et personnellement je ne vois pas vraiment comment tu pourrais t'en dépatouiller. o_O.
    Peut-être qu'un autre membre proposera une autre solution....

    ++

  4. #4
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Ta difficulté vient du fait que tu utilises Console.WriteLine en dur dans ta classe de travail ; pour contourner ce point d'achoppement il te suffit de mettre un tout petit peu d'abstraction dans ton code, par exemple en prenant un delegate en paramètre dans ta méthode :

    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
    public void EnumerateFoldersInDefaultStore(Action<string> handler)
            {
                Outlook.Application application = GetApplicationObject();
     
                Outlook.Folder root =
                    application.Session.
                    DefaultStore.GetRootFolder() as Outlook.Folder;
                EnumerateFolders(root, handler);
            }
     
            // Uses recursion to enumerate Outlook subfolders.
            private void EnumerateFolders(Outlook.Folder folder, Action<string> handler)
            {
                Outlook.Folders childFolders =
                    folder.Folders;
                if (childFolders.Count > 0)
                {
                    foreach (Outlook.Folder childFolder in childFolders)
                    {
                        // Write the folder path.
                        Debug.WriteLine(childFolder.FolderPath);
                        handler(childFolder.FolderPath); // en remplacement de Console.WriteLine(childFolder.FolderPath);
                        // Call EnumerateFolders using childFolder.
                        EnumerateFolders(childFolder);
                    }
                }
            }
    Et dans le code appelant tu choisis la fonction à passer, par exemple un simple Console.WriteLine, ou bien une méthode plus complexe qui enregistre dans un fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sample.EnumerateFoldersInDefaultStore(Console.WriteLine);
    Avec un fichier dont le chemin est passé en paramètre dans les arguments du programme et une lambda :

    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
    static void Main(string[] args)
            {
                string filePath = args.Length > 0 ? args[0] : "output.txt";
                using(var writer = new System.IO.StreamWriter(filePath))
                {
                    Sample sample = new Sample();
                    sample.EnumerateFoldersInDefaultStore(s =>
                    {
                        Console.WriteLine(s); // Pour la trace à l'écran, optionnel
                        writer.WriteLine(s);
                    });
                }
     
                Console.WriteLine();
                Console.WriteLine("Fin du programme. Taper n'importe quelle touche pour quitter...");
                Console.ReadKey();
            }

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

Discussions similaires

  1. [WD-2010] Insérer une image qui est intégrée dans un fichier XML
    Par kevint13 dans le forum Word
    Réponses: 2
    Dernier message: 11/03/2015, 08h43
  2. Réponses: 2
    Dernier message: 22/06/2014, 11h52
  3. Réponses: 5
    Dernier message: 21/04/2013, 14h37
  4. Aucun message n'est écrit dans le fichier erreurs de Sybase
    Par bouzahme dans le forum Adaptive Server Enterprise
    Réponses: 5
    Dernier message: 26/07/2010, 21h56
  5. récupérer ce qui est affiché dans une combobox ?
    Par Sefrou dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/01/2009, 19h37

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