Рассмотрим подробнее возможности функции ShFileOperation. Сначала остановимся на режиме копирования, когда wFunc = FO_COPY. Если в pFrom записать текст "filel.txt", а в рТо - "file2.txt", то в текущем каталоге будет создана копия file2.txt файла filel.txt. Если файла filel.txt в каталоге не окажется, будет показано стандартное окно Windows с сообщением, что копирование не может быть проведено, так как указанного файла нет. В этом случае функция ShFileOperation вернет ненулевое значение, свидетельствующее об ошибке.

Если в каталоге имеется уже файл file2.txt, то выполнение копирования будет зависеть от наличия в fFlags флага FOF_RENAMEONCOLLISION. Если этот флаг отсутствует, пользователю будет показано стандартное окно Windows с сообщением, что файл уже имеется, и с предложением ответить, надо ли заменять файл, созданный тогда-то, новым файлом, созданным тогда-то. При положительном ответе файл file2.txt будет заменен и функция ShFileOperation вернет 0. При отрицательном ответе копирование будет прервано, и функция ShFileOperation вернет ненулевое значение.

Впрочем, окно с запросом о замене файла, как и все другие запросы, будет показано пользователю, только если не установлен флаг FOF_NOCONFIRMATION. Если же этот флаг установлен, то вместо запросов автоматически будут выполняться действия по умолчанию.

Если файл file2.txt имеется, и задан флаг FOF__RENAMEONCOLLISION, то, независимо от флага FOF__NOCONFIRMATION, никаких запросов пользователю не будет, а в каталоге будут автоматически создаваться копии файла filel.txt с именами "Копия filel.txt", "Копия (2) filel.txt" и т.д.

В рассмотренных примерах имена файлов были заданы без путей, так что подразумевался текущий каталог. Если заданы полные пути к файлам, то могут возникать различные ситуации. Если нет каталога, указанного в pFrom, то реакция будет такая же, как описана выше при отсутствии файла. А если нет каталога, указанного в рТо, то пользователю будет показано стандартное окно Windows с сообщением, что папка отсутствует и с вопросом, надо ли ее создавать. При положительном ответе папка будет создана, файл скопируется, и функция ShFileOperation вернет 0. При отрицательном ответе копирование будет прервано, и функция ShFileOperation вернет ненулевое значение.

Запрос о создании отсутствующего каталога будет сделан только в случае, если не установлен флаг FOF_NOCONFIRMMKDIR. А при наличии этого флага отсутствующий каталог всегда будет создаваться автоматически.

Мы рассмотрели случаи, когда копировался один файл. Однако в pFrom может быть задан шаблон. Например, "c:\test\*.txt" или "c:\test\*.*". Первый из них означает копирование всех файлов с расширением .txt из папки c:\test, а второй - копирование всех файлов папки. При задании в pFrom шаблона подразумевается, что в рТо задан каталог.

В pFrom можно задавать имена нескольких файлов или нескольких шаблонов, разделяя их нулевыми символами. Например, текст "*.txt" #0 "*.ехе" #0 #0, занесенный в pFrom, обеспечит копирование из текущего каталога всех файлов с расширениями .txt и .ехе в каталог, указанный в рТо.


⇐ Предыдущая страница| |Следующая страница ⇒

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



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

  • Февраль
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс