Как я могу определить ли Консоль. Был перенаправлен в файл?

Я нашел решение, я сделал это:

$query->addSelect('CASE WHEN c.priority IS NULL THEN 1 ELSE 0 END as HIDDEN priority_is_null');
$query->addSelect('CASE WHEN c.priority = 0 THEN 1 ELSE 0 END as HIDDEN priority_is_zero');
$query->addOrderBy('priority_is_null', 'ASC');
$query->addOrderBy('priority_is_zero', 'ASC');
$query->addOrderBy('c.priority', 'ASC');
15
задан Roman Starkov 13 April 2009 в 14:02
поделиться

5 ответов

p / invoke GetFileType (GetStdHandle (STD_OUTPUT_HANDLE)) или вызов безобидной консольной функции, например GetConsoleScreenBufferInfo для проверки на недопустимую ошибку дескриптора. Если вы хотите узнать о стандартной ошибке, используйте STD_ERROR_HANDLE . Я полагаю, что вы даже можете сравнить дескрипторы, возвращенные GetStdHandle (STD_OUTPUT_HANDLE) и GetStdHandle (STD_ERROR_HANDLE) , чтобы обнаружить такие вещи, как 2> & 1

.
11
ответ дан 1 December 2019 в 01:46
поделиться

Хотя это немного затуманено и, вероятно, не гарантированно сработает, вы можете попробовать это:

bool isRedirected;

try
{
    isRedirected = Console.CursorVisible && false;
}
catch
{
    isRedirected = true;
}

Вызов CursorVisible вызывает исключение, когда консоль перенаправлена.

8
ответ дан 1 December 2019 в 01:46
поделиться

You need to use reflection - a bit grubby but the following will work:

static bool IsConsoleRedirected()
{
    var writer = Console.Out;
    if (writer == null || writer.GetType ().FullName != "System.IO.TextWriter+SyncTextWriter") return true;
    var fld = writer.GetType ().GetField ("_out", BindingFlags.Instance | BindingFlags.NonPublic);
    if (fld == null) return true;
    var streamWriter = fld.GetValue (writer) as StreamWriter;
    if (streamWriter == null) return true;
    return streamWriter.BaseStream.GetType ().FullName != "System.IO.__ConsoleStream";
}
2
ответ дан 1 December 2019 в 01:46
поделиться

Почему выходной файл переносится в перенаправленном файле? Обтекание, которое делает консоль, не посредством разрывов строк. Другими словами, эта строка:

привет, меня зовут Эндрю Хэйр

, обернул бы в тощую консоль вот так:

привет, мой нам
это Андрей
Хэйр

, но если бы ты перенаправил вывод в файл, это было бы написано так:

привет, меня зовут Эндрю Хэйр

, поскольку в выводе нет настоящих разрывов строк.

0
ответ дан 1 December 2019 в 01:46
поделиться

Не делай этого! Просто передайте дополнительный параметр командной строки, который определяет форматирование, которое вы хотите применить. Это проще, чище и легче понять как людям, которые будут использовать ваше приложение, так и людям, которые будут работать над вашим кодом.

0
ответ дан 1 December 2019 в 01:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: