Delphi

КОМПЬЮТЕРНЫЕ КУРСЫ "ПОИСК"

[Главная страница] [Delphi] [Контакты]

Класс TFileStream


Самым лучшим инструментом для записи данных в файлы и чтения данных из них является класс TFileStream (этот класс объявлен в модуле Classes). Класс TFileStream позволяет выполнять следующие действия:

  • Читать или записывать любую разновидность данных.
  • Читать или записывать компоненты.
  • Копировать данные в другой поток.

Чтобы начать чтение или запись данных в файл, вы должны создать экземпляр класса TFileStream. Конструктор TFileStream принимает два параметра:

constructor Create(const FileName: string; Mode: Word);

Первый параметр представляет имя файла, а второй параметр показывает, как открывать файл — создать, открыть для чтения, открыть для записи, открыть для чтения и записи и так далее. В таблице ниже содержится список констант, которые могут быть переданы в качестве параметра Mode.

Обычные режимы открытия TFileStream
Константа Описание

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.