Толик Панков
hex_laden
............ .................. ................

October 2025
      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

Толик Панков [userpic]
C#, как записать в STDERR сообщение об ошибке из консольного приложения.

Пост из серии спрашивали - отвечаем.

Итак, как в C# записать в STDERR. STDERR - это стандартный поток вывода для сообщений об ошибках, туда правильно организованные консольные приложения отправляют, собственно, сообщения об ошибках. Отправить в STDERR сообщение можно с помощью объекта Console.Error:

Console.Error.WriteLine("Write to STDERR.");

Код тестового приложения


static void Main(string[] args)
{
    Console.WriteLine("Write to STDOUT.");
    Console.Error.WriteLine("Write to STDERR.");
}


Проверка


Для проверки можно создать BAT-файл, вызывающий тестовое приложение и переопределяющий (копия) вывод со стандартных потоков в файлы stderr_.txt и stdout_.txt. stderr и stdout являются зарезервированными системными именами, потому к именам файлов надо что-то добавить, знак _ в данном случае:

Экран при выполнении тестового приложения:

Z:\...\write2stderr\write2stderr\bin\Debug>write2stderr.exe
Write to STDOUT.
Write to STDERR.

При выполнении BAT-файла экран останется пустым, но в директории с файлом появятся два файла stderr_.txt и stdout_.txt со следующим содержимым.

stderr_.txt:
	Write to STDERR.

stdout_.txt:
	Write to STDOUT.


Пример на GitHub


Исходник
Тестовый BAT-файл
BAT-файл и скомпилированный EXE

Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2021/08/26/c-kak-zapisat-v-stderr-soobshhenie-ob-oshibke-iz-konsolnogo-prilozheniya/

Tags: ,
Comments
(Anonymous)

> stderr и stdout являются зарезервированными системными именами, потому к именам файлов надо что-то добавить, знак _ в данном случае

Схуяли? В обычные stderr.txt и stdout.txt всё прекрасно пишется.

в win7 из CMD-скрипта не работает.