Копировать файлы в любых приложениях VCL можно с помощью потоков типа TFileStream. Создание такого потока осуществляется вызовом конструктора

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

Первый аргумент FileName - строка с именем файла. Если в ней не задан путь к файлу, подразумевается текущий каталог. Второй аргумент Mode определят режим открытця файл, и может включать один флаг режима и один флаг доступа. Флаги режима могут быть следующими:

fmCreate Создается файл с данным именем. Если подобный файл уже существовал, его содержимое стирается, и файл открывается в режиме записи.

fmOpenRead Открывает существующий файл только для чтения.

fmOpenWrite Открывает существующий файл только для записи.

Прежнее содержимое файла стирается.

fmOpenRead Write Файл открывается для чтения и записи.

Флаги доступа могут быть следующими:

іїлвпагеСотраі

Доступ определяется ГСВ.

іїпЗпагеЕхсІивіуе

Другие приложения не могут открыть файл ни для запи-

си, ни для чтения.

іїлвпагеВепуЛУгке

Другие приложения могут открыть файл только для чте-

ния, но не для записи.

іглЯпагеВепуКеасІ

Другие приложения могут открыть файл только для запи-

си, но не для чтения.

fmShareDenyNone

Полный доступ к файлу других приложений.

После того как входной и выходной потоки для копирования файлов созданы, можно использовать для копирования метод CopyFrom:

function CopyFrom(Source: TStream;
Count: Int64): Int64;

Параметр Source определяет поток, из которого копируются данные, а параметр Count указывает число копируемых байтов. Если Count = 0, то копируется весь файл.

Таким образом, копирование файла filel в файл file2 с помощью потоков может быть организован следующим образом:

var Source,Target: TFileStream;

Source := TFileStream.Create(1filel', fmOpenRead ); try

Target := TFileStream.Create('file2', fmCreate); try

Target.CopyFrom(Source, 0); finally

Target.Free; end; finally

Source.Free;
end;

При копировании дата копии станет текущей. Если вы хотите при копировании сохранить в копии дату исходного файла, это можно сделать функциями FileGetDate и FileSetDate:

FileSetDate(Target.Handle, FileGetDate(Source.Handle));

Использование потоков предпочтительнее рассмотренных в разд. 10.7 способов копирования файлов функциями Pascal. Оно производится намного скорее. В приложении VCL Win32 можно дополнить приведенный код различными проверками, рассмотренными в разд. 10.7. А в приложении VCL .NET число таких проверок можно уменьшить, так как многие ситуации (например, отсутствие файла-источника или отсутствие доступа к папке) вызовут генерацию исключений с показом пользователю понятных ему русских замечаний.

10.7 Копирование, удаление, перемещение файлов средствами языка Pascal || Оглавление || 10.9 Манипуляции с файлами и каталогами с помощью функции ShFileOperation


Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Июнь
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31