Работа с файлами по сети Delphi

Работа с файлами по сети в Delphi не представляет особого затруднения существуют функции DeleteFile(), CopyFile(), MoveFile(). Однако их необходимо знать нюансы их использования.

Например, функции CopyFile(), MoveFile() не могут оперировать с файлами расположенных на расшаренных сетевых ресурсах. Хотя DeleteFile() прекрасно справляется со своими обязанностями. Все сводиться к тому как реализованы эти функции в рамках Delphi. Пожтому для работы с файлами по сети необходимо использовать MoveFileEx, CopyFileEx. Это WinApi функции и они могут решать поставленные задачи.

Для перемещения по сети файлов можно воспользоваться следующим кодом.

Var

AFileName, ANewFileName: string;

begin

if MoveFileEx(PChar(AFileName), PChar(ANewFileName), MOVEFILE_REPLACE_EXISTING or MOVEFILE_COPY_ALLOWED) then ShowMessage(‘Успешно’)

else RaiseLastOSError;

Флаг MOVEFILE_COPY_ALLOWED желательно указывать всегда, потому что без него перемещение будет возможно только в рамках одного логического диска. Для копирования файла можно воспользоваться следующим кодом.

Var

AFileName, ANewFileName: string;

begin

if CopyFileEx(PChar(CopyBackUpFrom + lFileName), PChar(CopyBackUpTo + lFileName), nil, nil, 0, 0) then ShowMessage(‘Успешно’)

else RaiseLastOSError;

Последние четыре параметра имеют специальное назначение.

lpProgressRoutine – адрес функции обратного вызова для отображения динамики процесса копирования (более подробно см. справке по function CopyProgressRoutine ).

lpData – указатель на структуру, в которой храняться параметры для функции обратного вызова.

pbCancel – параметр указывающий, на то что надо прервать копирование. Если при копировании установить его в

dwCopyFlags – опции копирования.

Share

Tags:

5 Responses to “Работа с файлами по сети Delphi”

  1. hypereveryday пишет:

    Красиво написано, мне понравилось.

  2. Raynoch пишет:

    Wow, that’s a really clever way of tihnknig about it!

  3. Аноним пишет:

    Замечательно, это очень ценная штука

  4. Vokivon пишет:

    Все замечательно! Но может кто знает как быть с FindFirst, которая не хочет работать с сетевыми папками?

  5. Я работал с файлами по сети при помощи этой функции, все работает. Без примера кода не найти проблему – все экстрасенсы в отпуске :).

Leave a Reply