Погряз в разборках на одном из файловых серверов и совсем забыл о том, с чего всё начиналось в том или ином виде. Речь о проектах прямиком из IDE Lazarus.
Изначально с ошибкой, о которой я поведу здесь речь, я столкнулся ещё летом, когда пришлось обрабатывать текстовые файлы в маленькой консольной программе. Попробую смоделировать ситуацию и показать, как избавиться от ошибки ElnOutError: File not open.
Данная ошибка побеспокоила меня в проекте Программа:

Предположим, что целью программы является запись и чтение текстового файла. Для записи я написал максимально простую функцию WriteToFile, а вот чтение из файла организовал с помощью функции ReadFileToString из модуля FileUtil.
Чтобы всё это заработало на этапе сборки — добавим зависимость от пакета LazUtils.

Основной модуль программы у меня выглядит так:
program test;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
Classes,
FileUtil,
Windows
{ you can add units after this };
var
text:string;
f: textfile;
{$R *.res}
// Функция записи текста в файл
function WriteToFile(filename:string; text:string):boolean;
begin
assign(f,filename);
rewrite(f);
writeln(f,text);
close(f);
end;
begin
// Установим заголовок консоли
SetConsoleTitle('Console Title');
// Запишем текст в файл
WriteToFile('test.txt', 'test');
// Считаем текст из файла
text:=ReadFileToString('test.txt');
// Выведем текст в консоль
WriteLn(text);
// Ждём реакции пользователя
ReadLn;
end.
Успешно компилирую, запускаю… И вдруг: An unhandled exception occured at… ElnOutError: File not open…

Файл на месте, текст в файле тоже. Функция WriteToFile успешно отработала. Что может быть не так?
Забегая вперёд, отмечу: оказалось, что в параметрах проекта необходимо было убрать галочку с параметра компилятора FPC — Графическое приложение Win32 (-WG).
Изначально параметры проекта в разделе Настройка и целевая платформа выглядят так:

Снимаем галку и окействуем:

Пересобираем проект и запускаем программу:

Записали в файл слово test и считали его же. Всё отлично отработало.