Шеф дает секретарше две дискеты:
- Леночка, скопируйте вот эту дискету на эту, чистую.
Через пару минут она прибегает в слезах:
- Михаил Иваныч, чистую дискету ксерокс зажевал!
{
В следующем примере показано как можно осуществить чтение
и запись данных в/из файла. Данный пример предполагается
в первую очередь использовать тем, кто делает первые шаги
в вопросах чтения/записи. Для получения дополнительной
информации о каждом объекте, обратитесь к электронной справке.
В коде присутствует минимальная обработка исключительных
ситуаций, но она никоим образом не является законченным решением.
Для оформления программы необходимо установить на форме
компонент TMemo с заголовком Запись, и кнопку с заголовком
Чтение. Запустите программу, поместите несколько строк в "memo",
после чего нажмите на кнопку Запись. Очистите "memo", и нажмите Чтение.
}procedure TForm1.BtnWriteClick(Sender: TObject);
{ автор: Michael Vincze
}var
FileStream: TFileStream;
Writer: TWriter;
I: Integer;
begin
FileStream :=
TFileStream.Create('c:\delphi\projects\delta40\fileio\stream.txt',
fmCreate or fmOpenWrite or fmShareDenyNone);
Writer := TWriter.Create(FileStream, $FF);
Writer.WriteListBegin;
for I := 0 to Memo1.Lines.Count - 1 do
Writer.WriteString(Memo1.Lines[I]);
Writer.WriteListEnd;
Writer.Destroy;
FileStream.Destroy;
end;
procedure TForm1.BtnReadClick(Sender: TObject);
{ автор: Michael Vincze
}var
FileStream: TFileStream;
Reader: TReader;
begin{ пробуем открыть несуществующий файл
}try
FileStream :=
TFileStream.Create('c:\delphi\projects\delta40\fileio\bogus.txt',
fmOpenRead);
except
; { Destroy не нужен, поскольку Create потерпела неудачу }end;
FileStream :=
TFileStream.Create('c:\delphi\projects\delta40\fileio\stream.txt',
fmOpenRead);
Reader := TReader.Create(FileStream, $FF);
Reader.ReadListBegin;
Memo1.Lines.Clear;
whilenot Reader.EndOfList do
Memo1.Lines.Add(Reader.ReadString);
Reader.ReadListEnd;
Reader.Destroy;
FileStream.Destroy;
end;
Анализ кода: простой пример чтения и записи данных в файл с помощью Delphi. Код включает два процедура: BtnWriteClick для записи данных в файл и BtnReadClick для чтения данных из файла.
В процедуре BtnWriteClick:
Создается объект TFileStream с именем 'stream.txt' в режиме записи (fmCreate or fmOpenWrite or fmShareDenyNone). Если файл не существует, то он будет создан; если файл уже существует, то он будет перезаписан.
Создается объект TWriter с помощью объекта TFileStream и кодировки $FF.
Писатель записывает маркер начала списка в файл с помощью WriteListBegin.
Содержимое контрола Memo1 читается построчно, и каждая строка записывается в файл с помощью WriteString. Цикл работает от 0 до количества строк в Memo1 минус 1.
Писатель записывает маркер конца списка с помощью WriteListEnd, а затем оба писатель и файловый поток уничтожаются.
В процедуре BtnReadClick:
Используется блок try-except для попытки открытия не существующего файла 'bogus.txt' в режиме чтения (fmOpenRead). Если файл не существует, то будет выброшено исключение.
Создается файловый поток с именем 'stream.txt' в режиме чтения (fmOpenRead).
Создается объект TReader с помощью файла и кодировки $FF.
Читатель читает маркер начала списка из файла с помощью ReadListBegin.
Содержимое файла читается построчно, и каждая строка добавляется в Memo1 с помощью Lines.Add. Цикл работает до конца списка (EndOfList).
Читатель читает маркер конца списка из файла с помощью ReadListEnd, а затем оба читатель и файловый поток уничтожаются.
Рекомендации:
1. Обработка ошибок: код включает некоторые основные механизмы обработки ошибок (например, попытка открытия не существующего файла), но в производственной среде необходимо более тщательно обрабатывать исключения.
2. Путь к файлу: пути к файлам, используемые в коде ('c:\delphi\projects\delta40\fileio\stream.txt'), являются жестко закодированными и могут не быть подходящими для всех сред. Рекомендуется использовать относительные или настройки-основанные пути к файлам.
3. Организация кода: процедуры BtnWriteClick и BtnReadClick относительно короткие, но они все еще выполняют различные задачи. Возможно, стоит разбить их на более мелкие функции для улучшения организации кода и повторного использования.
В статье рассмотрено чтение и запись данных из файлов в Delphi, а также обработка исключительных ситуаций при работе с файлами.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.