Результат: ученик строит переносимый текстовый файловый конвейер, отделяет ввод-вывод от разбора и вычисления и сохраняет подтверждённый результат при отказах до начала публикации.

Содержание:

  1. Строить переносимые пути

    • текущий рабочий каталог;
    • относительный и абсолютный путь;
    • Path.Combine;
    • GetFullPath, GetFileName, GetDirectoryName и GetExtension;
    • отказ от ручного разделителя и пути, зависящего от компьютера.
  2. Работать с каталогами и файлами

    • Directory.CreateDirectory;
    • Directory.GetFiles;
    • File.Exists и Directory.Exists;
    • предварительная проверка как наблюдение, а не гарантия последующей операции;
    • изменение ресурса между проверкой и использованием.
  3. Читать и записывать полный текст

    • File.ReadAllText и WriteAllText;
    • File.ReadAllLines и WriteAllLines;
    • перезапись и создание файла;
    • получение массива строк;
    • отделение файловой операции от разбора содержимого.
  4. Указывать кодировку

    • Encoding.UTF8;
    • Encoding.Unicode как пример другой кодировки;
    • согласованная запись и чтение;
    • неверная интерпретация байтов без обязательного исключения;
    • контрольная содержательная проверка текста.
  5. Использовать машинный формат данных

    • InvariantCulture;
    • точный формат даты и времени;
    • устойчивый формат дробного числа;
    • пустые поля и разделители;
    • заголовок версии;
    • round-trip чтения и записи.
  6. Разделить файловый конвейер

    • получение путей;
    • чтение;
    • проверка структуры;
    • разбор значений;
    • предметная проверка;
    • вычисление;
    • форматирование;
    • запись.
  7. Обрабатывать ошибки содержимого

    • номер строки;
    • тип и причина повреждения;
    • сбор всех безопасно обнаружимых диагностик;
    • отмена всей операции или сохранение корректных строк по заранее выбранной политике;
    • отсутствие исключения для ожидаемого неверного формата.
  8. Обрабатывать файловые исключения

    • отсутствующий файл;
    • отсутствующий каталог;
    • запрет доступа;
    • иной IOException;
    • обработка на внешней границе;
    • продолжение независимого пакета по явной таблице решений.
  9. Обрабатывать каталог детерминированно

    • получение массива путей;
    • порядковая сортировка путей;
    • исчезнувший после перечисления файл;
    • независимый статус каждого входа;
    • сводный результат только после завершения анализа.
  10. Подготавливать результат в памяти

    • полный string или string[] кандидата;
    • проверка всех данных до первой записи;
    • сохранение существующей цели при ошибке разбора;
    • контрольная сумма либо обратное чтение кандидата;
    • отсутствие поэтапной публикации неполного отчёта.
  11. Использовать временный кандидат

    • временный путь в каталоге цели;
    • запись и обратная проверка;
    • переход к фиксации только после полного успеха;
    • очистка остатка;
    • отдельная диагностика отказа очистки;
    • отсутствие необоснованного обещания атомарности.
  12. Проектировать несколько результатов

    • несколько временных кандидатов;
    • единая подготовительная фаза;
    • критерий начала последовательной фиксации;
    • состояние после отказа между фиксациями;
    • резервные копии и ограниченность отката;
    • честное описание достигаемой согласованности.
  13. Внедрять искусственные отказы

    • отказ до чтения;
    • после разбора;
    • после вычисления;
    • после временной записи;
    • до и после фиксации;
    • во время очистки;
    • таблица состояния цели и временных файлов.