Ответ Лоренца - хорошее начало, но, к сожалению, можно использовать только вдохновение.Есть больше режимов для запуска консольного приложения.
Стандартный запуск (в консоли, без перенаправления)
В консоли все работает как положено.
Выполнение с перенаправлением с консоли со стандартным перенаправлением ввода и / или стандартного вывода
например,
type input_file.txt | application.exe
(в Windows ) или application.exe <input_file.txt
для перенаправления ввода
(замените type
на cat
в Linux )
или
application.exe | grep pattern
или application.exe >output_file.txt
для перенаправления вывода
или
type input_file.txt | application.exe | grep pattern
или application.exe <input_file.txt >output_file.txt
для перенаправления ввода и вывода
Выполнение с перенаправлением с консоли со стандартным выходом и ошибка перенаправления вывода
например application.exe >output_file.txt 2>error_file.txt
Выполнение со скрытой консолью и перенаправленным вводом / выводом / ошибкой
например, из приложения с графическим интерфейсом (консоль вообще не видна)
Выполнение со скрытой консолью без перенаправление ввода / вывода / ошибки
Каждый из этих режимов имеет свои «функции».Console.WindowHeight
и Console.WindowWidth
работают в Windows для 1-го и 2-го режимов стандартным способом.В Linux возвращаемое значение во 2-м и 3-м режимах равно ноль .Поэтому в Linux вы не можете обнаружить только перенаправление ввода.
Поэтому код ответа Лоренца не может быть использован для обнаружения перенаправления во всех случаях.IOException
при чтении Console.WindowHeight
или Console.WindowWidth
выбрасывается только при отсутствии вывода на консоль (например, 3-й режим) и только для Windows.
Для обнаружения вход перенаправление (только в Windows ) использовать эту функцию:
private static bool IsInputRedirected()
{
try
{
if (Console.KeyAvailable)
{
return (false);
}
}
catch (InvalidOperationException)
{
return (true);
}
return (false);
}
Для всех других перенаправлений и операционных систем ... попробуйте поэкспериментировать, как их обнаружить.Различные свойства консоли и функции работают (исключение выброса или нулевые возвращаемые значения) для разных режимов.
Проверено на Windows 7 .NET Framework 4 Client Profile
и Mono JIT compiler version 4.2.1 (Debian 4.2.1.102+dfsg2-7ubuntu4)
.
ВАЖНО:
Не используйте эту функцию для перенаправления ввода в Linux (обнаружение работающей ОС / платформы, например, Mono для Windows) , поскольку это может вызвать больше проблем, когда вы ложно ожидаете перенаправленияи перенаправление не активно.