J'ai une application de console écrite en C # qui traite certaines données puis imprime les résultats. Jusqu'à ce que les résultats soient disponibles, il existe une petite animation (/ - \ |) et le pourcentage d'avancement (XX%) qui met constamment à jour. P>
Évidemment, si l'utilisateur redirige la sortie de mon application, il sera imprimé sur le fichier texte où la sortie est redirigée. Si possible, je voudrais éviter cela. P>
Voilà donc un moyen de détecter si la sortie de mon application est redirigée? Je ne considère que montrer que les indicateurs de progrès lorsqu'ils sont gérés avec un paramètre spécifié, mais j'espère que quelqu'un aura une bonne réponse pour moi. P>
7 Réponses :
Vous ne pouvez pas. La sortie redirigée est totalement et entièrement en dehors du cadre du programme d'exécution. Vous edit: vous pouvez (maintenant) ... strong> avec .NET 4.5 à partir (voir Matt Brooks 'Matt Brooks' Réponse ). P>
Tout comme je pensais>.
Et si je veux deviner certains paramètres par défaut selon que l'entrée passe de la console ou non? Par exemple, dans SQL Parser, il est bon d'imprimer le jeu d'enregistrements résultant lors de l'acceptation des commandes du clavier, mais soyez silencieux lors de l'analyse de dossier. Ou si je me soucie de générer la nomenclature Unicode lorsque vous écrivez dans le fichier? Quels sont les modèles qui doivent être utilisés dans ces cas?
@HIMELFLA: Si vous voulez gérer des trucs comme écrire un bom, demandez un paramètre de sortie. Selon le système d'exploitation, vous pouvez détecter si vous exécutez sur une console, mais il est convolué pour dire le moins, et cela ne fonctionne pas sur Windows / C # Je ne pense pas. Votre pari le plus simple est d'accepter un
-q code> (silencieux) ou une option similaire ou supposez-vous que vous obtenez une entrée programmée si vous avez ladite option active d'écrire dans un fichier.
Plutôt que d'essayer de déterminer si le contenu est redirigé ou non, j'utiliserais console.writeline (ou console.out.writeline) pour imprimer vos résultats et console.error.write pour vos mises à jour d'état. La sortie d'écran affichera correctement mais ne pas être reflétée dans le fichier texte. P>
Bonne idée, mais il est plutôt trompeur d'écrire des données non erronées à STDERR.
Trompeur, oui, mais une pratique courante tout de même.
Vous pouvez utiliser la méthode native getconsolemode a > Pour voir si stdout va à une console ou non. P>
Cette méthode est suggérée par les remarques de la documentation de WriteConsole : p>
... Déterminez si la poignée de sortie est une poignée de la console (une méthode consiste à appeler la fonction getconsolemode et à vérifier si elle réussit) ... P>
blockQuote>
Grannié, cela signifie utiliser des méthodes natives dangereuses ... mais c'est possible.
Certaines propriétés appellent getconsolemode code> et jetez une défaillance, telle que
console.cursorvisible code>. Cela permettrait de vérifier la sortie de la console sans utiliser p / invoke.
Comme il s'avère, il sera bientôt disponible à la manière élégante et inter-plate-forme: lien . < / p>
Probablement, vous pouvez essayer ceci: si la sortie standard n'est pas redirigée, la sortie du getFileType () doit être 0x0002.
Cela fonctionne pour moi. :) p> p>
Lorsqu'une application redirige la sortie avec l'opérateur> Opérateur ( console.write ("quoi que ce soit") code> (and writeine) rédigez-vous des données sur le flux derrière
console.out code>.
Pour toujours afficher une barre de progression sur la console et ne pas l'écrire dans un fichier, si la sortie est redirigée vers un fichier ou non, utilisez plutôt le flux d'erreur: P>
console.error.write ("<
dir c: \ *. *> Plus code>), seule
console.out code> est redirigé et non la console
.Error code> p>
de .NET Framework 4.5 En cours, vous pouvez utiliser le CONSOLE.ISOutUtPutRecTRecTReck Code> Propriété
pour détecter cela. P>
Il y a aussi console.IsErrorredirected code>. p>
Son intéressant de lire votre question trois ans plus tard et réalisant à quel point c'était idiot :-) S'il y a quelqu'un qui lisait ceci ... La bonne façon d'approcher ceci est certainement certainement pour ne pas afficher la barre de progression par défaut ... ne l'affiche que lorsque Un commutateur spécifique est utilisé.
duplicache possible de Comment puis-je Déterminez si la console.out a été redirigée vers un fichier?