Содержание
Пример использования файлов
Задача. В текстовом файле f.txt записаны (вперемешку) целые числа: поровну отрицательных и положительных. Используя только один вспомогательный файл, переписать в текстовый файл h.txt все эти числа так, чтобы:
- порядок отрицательных чисел был сохранён;
 - порядок положительных чисел был сохранён;
 - любые два числа, стоящие рядом, имели разные знаки.
 
Решение
Если бы нам разрешили использовать два вспомогательных файла, мы бы просто переписали все положительные числа в один из них, а все отрицательные — в другой. А затем объединили бы два этих файла. В нашем же случае придётся переписать во вспомогательный файл только положительные числа. Затем при «сборке» мы будем считывать из вспомогательного файла «всё подряд», а из исходного — только отрицательные числа.
Реализация
var f, g, h: Text;
k : Integer;
begin
Assign(f, 'f.txt');
Assign(g, 'g.txt');
Assign(h, 'h.txt');
{ Переписываем положительные числа в доп. файл }
Reset(f);
Rewrite(g);
while not Eof(f) do
begin
Read(f, k);
if k > 0 then
Write(g, k, ' ');
end;
{ Собираем числа в новый файл h.txt }
Reset(f); { Возвращаем указатель на начало файла f }
Reset(g);
Rewrite(h);
while not Eof(g) do
begin
Read(g, k);
Write(h, k, ' ');
repeat
Read(f, k)
until k < 0;
Write(h, k, ' ');
end;
Close(f);
Close(g);
Close(h);
end.
Изменение реакции на ошибку
По умолчанию любая ошибка ввода или вывода вызывает аварийную остановку работы программы. Однако существует возможность отключить такое строгое реагирование; в этом случае программа сможет либо игнорировать эти ошибки (что, правда, далеко не лучшим образом отразится на результатах её работы), либо обрабатывать их при помощи системной функции IOResult : Integer.
Директива компилятора1 {$I-} отключает режим проверки, соответственно директива {$I+} — включает.
Если при отключенной проверке правильности ввода–вывода ({$I-}) происходит ошибка, то все последующие операции ввода–вывода игнорируются — вплоть до первого обращения к функции IOResult. Её вызов «очищает» внутренний показатель («флаг») ошибки, после чего можно продолжать ввод или вывод.
Если функция IOResult возвращает 0, значит, операция ввода–вывода была завершена успешно. В противном случае функция вернёт номер произошедшей ошибки.
Пример использования директив {$I}
Write('Введите имя файла: ');
repeat
ReadLn(s); {s : String}
{$I-}
Assign(f, s);
Reset(f);
case IOResult of
0 : flag := True;
3 : Write('Путь к файлу указан неверно. Измените путь: ');
5 : Write('Доступа к файлу нет. Измените имя файла: ');
152 : Write('Такого диска нет. Измените имя диска: ');
else Write('Такого файла нет. Измените имя файла: ');
end;
until flag;
{$I+}
| Номер ошибки | Описание ошибки | Генерирующие процедуры2 | |
2  | File not found | Файл не найден | Append, Erase, Rename, Reset, Rewrite | 
3  | Path not found | Директория не найдена | Append, ChDir, Erase, MkDir, Rename, Reset, Rewrite, RmDir | 
4  | Too many open files | Открыто слишком много файлов одновременно | Append, Reset, Rewrite | 
5  | File access denied | Отказ в доступе к файлу | Append, BlockRead, BlockWrite, Erase, MkDir, Read, ReadLn, Rename, Reset, Rewrite, RmDir, Write, WriteLn | 
12  | Invalid file access code | Попытка использовать текстовый файл как типизированный или наоборот | Append, Reset | 
16  | Cannot remove current directory | Невозможно удалить заданную директорию | RmDir | 
100  | Disk read error | Попытка чтения после конца файла | Read, ReadLn | 
101  | Disk write error | Ошибка записи на диск (диск полон) | Close, Write, WriteLn | 
102  | File not assigned | Файл не назначен | Append, Erase, Rename, Reset, Rewrite | 
103  | File not open | Файл не открыт{бинарные файлы} | BlockRead, BlockWrite, Close, Eof, FilePos, FileSize, Read, Seek, Write | 
104  | File not open for input | Файл не открыт для ввода {текстовые файлы} | Eof, Eoln, Read, ReadLn, SeekEof, SeekEoln | 
105  | File not open for output | Файл не открыт для вывода {текстовые файлы} | Write, WriteLn | 
106  | Invalid numeric format | Неправильный числовой формат {текстовые файлы} | Read, ReadLn | 
152  | Drive not ready | Задано неверное имя диска | Append, Erase, Rename, Reset, Rewrite | 

 
 ::
      
 ::
      
 ::