Ошибка ввода-вывода в C#
Класс IOException и производные (FileNotFoundException, EndOfStreamException) сообщают, что операция с потоком или файлом не удалась на уровне ввода-вывода. Это не логическая ошибка приложения, а отказ ресурса: файла нет или диск занят.
После Dispose повторная запись бросает ObjectDisposedException. Это другой тип, не наследник IOException: объект потока уже освобождён. В программе перехватывают конкретный тип и решают, повторять ли операцию.
Попробуем открыть несуществующий файл только для чтения без создания. FileMode.Open без файла даёт FileNotFoundException, наследник IOException. Путь должен отсутствовать в рабочей папке процесса:
using System.IO;
try
{
using FileStream stream = new("missing.bin", FileMode.Open, FileAccess.Read);
stream.ReadByte();
}
catch (IOException)
{
Console.WriteLine(1); // выведет 1
}
Закройте MemoryStream через Dispose и перехватите исключение при Write; выведите 1.