1. У тебя явно ошибка в алгоритме. В случае, если искомая строка НЕ ПОСЛЕДНЯЯ, по выходу из While у тебя будет во флаге false.
2. Сама I/O error скорее всего связана не с первым приведенным кодом, а с Writeln, бо как оно нормально работает только в консольном приложении. Походу, ты пытаешься записать в файл. Ну и пропустил файловую переменную на месте первого параметра. Кстати, и в цикле при чтерии она тоже пропущена.
3. Далее, пути. Если твоя программа в PRogram Files, то скорее всего оно падает на правах записи, т.к. для этого нужны права администратора.
4. Вообще тот цикл должен выглядеть так:
Код:
b := false;
While Not EOF(f) Do
begin
Readln(f,s);
b := Login = s;
if b then Break;
end;