Режим доступа к файлу в C#
Перечисление FileMode задаёт, что делать с файлом на диске: создать новый, открыть существующий, обрезать до нуля байт или создать при отсутствии. FileAccess ограничивает операции потока - только чтение, только запись или оба направления.
Если файла нет, режим FileMode.Open бросает исключение уже в конструкторе. Конструктор создаёт поток с FileAccess.Read, а WriteByte на нём позже бросает NotSupportedException. Режимы лучше задавать явно, а не полагаться на значения по умолчанию.
Откроем журнал только для чтения. Читать через этот поток можно, а писать нельзя:
using System.IO;
File.WriteAllText("logs.tmp", "entry");
using FileStream ledger = new("logs.tmp", FileMode.Open, FileAccess.Read);
Console.WriteLine(ledger.CanRead ? 1 : 0); // выведет 1
Console.WriteLine(ledger.CanWrite ? 1 : 0); // выведет 0
Создайте файл "meter.tmp" с текстом "start", откройте его только для чтения и выведите 1, если читать можно, а писать нельзя.