Результат: ученик строит переносимый текстовый файловый конвейер, отделяет ввод-вывод от разбора и вычисления и сохраняет подтверждённый результат при отказах до начала публикации.
Содержание:
-
Строить переносимые пути
- текущий рабочий каталог;
- относительный и абсолютный путь;
Path.Combine;GetFullPath,GetFileName,GetDirectoryNameиGetExtension;- отказ от ручного разделителя и пути, зависящего от компьютера.
-
Работать с каталогами и файлами
Directory.CreateDirectory;Directory.GetFiles;File.ExistsиDirectory.Exists;- предварительная проверка как наблюдение, а не гарантия последующей операции;
- изменение ресурса между проверкой и использованием.
-
Читать и записывать полный текст
File.ReadAllTextиWriteAllText;File.ReadAllLinesиWriteAllLines;- перезапись и создание файла;
- получение массива строк;
- отделение файловой операции от разбора содержимого.
-
Указывать кодировку
Encoding.UTF8;Encoding.Unicodeкак пример другой кодировки;- согласованная запись и чтение;
- неверная интерпретация байтов без обязательного исключения;
- контрольная содержательная проверка текста.
-
Использовать машинный формат данных
InvariantCulture;- точный формат даты и времени;
- устойчивый формат дробного числа;
- пустые поля и разделители;
- заголовок версии;
- round-trip чтения и записи.
-
Разделить файловый конвейер
- получение путей;
- чтение;
- проверка структуры;
- разбор значений;
- предметная проверка;
- вычисление;
- форматирование;
- запись.
-
Обрабатывать ошибки содержимого
- номер строки;
- тип и причина повреждения;
- сбор всех безопасно обнаружимых диагностик;
- отмена всей операции или сохранение корректных строк по заранее выбранной политике;
- отсутствие исключения для ожидаемого неверного формата.
-
Обрабатывать файловые исключения
- отсутствующий файл;
- отсутствующий каталог;
- запрет доступа;
- иной
IOException; - обработка на внешней границе;
- продолжение независимого пакета по явной таблице решений.
-
Обрабатывать каталог детерминированно
- получение массива путей;
- порядковая сортировка путей;
- исчезнувший после перечисления файл;
- независимый статус каждого входа;
- сводный результат только после завершения анализа.
-
Подготавливать результат в памяти
- полный
stringилиstring[]кандидата; - проверка всех данных до первой записи;
- сохранение существующей цели при ошибке разбора;
- контрольная сумма либо обратное чтение кандидата;
- отсутствие поэтапной публикации неполного отчёта.
- полный
-
Использовать временный кандидат
- временный путь в каталоге цели;
- запись и обратная проверка;
- переход к фиксации только после полного успеха;
- очистка остатка;
- отдельная диагностика отказа очистки;
- отсутствие необоснованного обещания атомарности.
-
Проектировать несколько результатов
- несколько временных кандидатов;
- единая подготовительная фаза;
- критерий начала последовательной фиксации;
- состояние после отказа между фиксациями;
- резервные копии и ограниченность отката;
- честное описание достигаемой согласованности.
-
Внедрять искусственные отказы
- отказ до чтения;
- после разбора;
- после вычисления;
- после временной записи;
- до и после фиксации;
- во время очистки;
- таблица состояния цели и временных файлов.

