КОМПЬЮТЕРНЫЕ КУРСЫ "ПОИСК"
[Главная страница] [Delphi] [Контакты]
Самым лучшим инструментом для записи данных в файлы и чтения данных из них является класс TFileStream (этот класс объявлен в модуле Classes). Класс TFileStream позволяет выполнять следующие действия:
Чтобы начать чтение или запись данных в файл, вы должны создать экземпляр класса TFileStream. Конструктор TFileStream принимает два параметра:
constructor Create(const FileName: string; Mode: Word);
Первый параметр представляет имя файла, а второй параметр показывает, как открывать файл — создать, открыть для чтения, открыть для записи, открыть для чтения и записи и так далее. В таблице ниже содержится список констант, которые могут быть переданы в качестве параметра Mode.
| Константа | Описание |
|---|---|
|
fmCreate |
Создание нового файла или открытие файла для записи, если он уже существует. |
| fmOpenRead | Открытие файла только для чтения. |
| fmOpenWrite | Открытие файла только для записи. |
| fmOpenReadWrite | Открытие файла для чтения и записи. |
Чтение и запись выполняются с помощью методов Read и Write. Оба метода принимают два параметра:
function Read(var Buffer;
Count: Longint): Longint;
function Write(const Buffer; Count: Longint):
Longint;
Метод Read считывает байты Count из файла и помещает данные в переменную Buffer. Метод Write записывает байты Count из переменной Buffer в файл. Оба метода обновляют свойство Position, которое представляет позицию потока.
В листинге ниже показано, как производится запись компонента и двух значений в файл с помощью класса TFileStream.
procedure TForm1.Button1Click(Sender: TObject);
var
fs: TFileStream;
n: Integer;
s: string;
begin
fs := TFileStream.Create('sample.txt', fmCreate);
try
fs.WriteComponent(Label1);
n := 5650;
fs.Write(n, SizeOf(Integer));
{ При записи строк необходимо сообщить методу Write о том,
что запись должна начинаться с первого символа }
s := 'Some text';
fs.Write(s[1], Length(s));
finally
fs.Free;
end; // завершение конструкции try (fs)
end;
Большое количество компонентов VCL умеют загружать данные из потока (метод LoadFromStream) или сохранять данные в поток (метод SaveToStream). В следующем примере демонстрируется применение метода SaveToStream для сохранения содержимого двух компонентов ТМеmо в одном текстовом файле.
procedure TForm1.Button2Click(Sender: TObject);
var
fs: TFileStream;
begin
fs := TFileStream.Create('sample2.txt', fmCreate);
try
Memo1.Lines.SaveToStream(fs);
Memo2.Lines.SaveToStream(fs);
finally
fs.Free;
end;
end;
Копирование данных из одного потока в другой выполняется с помощью метода CopyFrom. Метод CopyFrom принимает два параметра: исходный поток и количество байтов, которые будут скопированы из одного потока в другой.
Следующий пример показывает, насколько просто копировать файл с помощью класса TFileStream.
procedure TForm1.Button3Click(Sender: TObject);
var
src, dest: TFileStream;
begin
src := TFileStream.Create('sample.txt', fmOpenRead);
try
dest := TFileStream.Create('dest.txt', fmCreate);
try
// копирование файла
dest.CopyFrom(src, src.Size)
finally
dest.Free;
end; // завершение конструкции try (dest)
finally
src.Free;
end; // завершение конструкции try (src)
end;
Источник: Иван Хладни - Внутренний мир Borland Delphi 2006.