Переименование файла в контейнере без импорта/экспорта

Бывают случаи когда нам нужно переименовать файл, находящийся в поле-контейнер. До выхода 13 версии FileMaker, единственным способом были экспортировать файл на диск под нужным именем и вставить обратно в контейнер. Начиная с 13-й версии мы можем воспользоваться связкой новых функций  Base64Encode() и Base64Decode().  Хитрость состоит в том, что функция Base64Decode() имеет опциональный параметр — имя файла. Так что последовательное кодирование, и обратное декодирования файла в контейнере позволит нам переименовать файл.

В общем случае функция переименования будет выглядеть так:

Base64Decode ( Base64Encode ( Table::Container ) ; "NewFileName" )

По ссылке можно скачать файл примера.

Важным преимуществом такого способа переименования, что он (в отличии от способа импорт/экспорт) работает при любых способах подключения к базе, в том числе и при использовании WebDirect.

Однако нужно помнить, что кодирование и декодирование файла может занять определенное время, если размер файла достаточно большой. По тестам коллег из ClickWorks переименование 100мб файла на маке с SSD диском заняло 30 секунд.

Оригинал заметки можно прочитать здесь

3 Комментариев

  1. а может, имеет смысл озвучить также способ переименования файла без импорта-экспорта в младших версиях (разумеется, БД должны быть размещены на сервере)? Хотя сейчас, наверное, никто уже младшими версиями и не пользуется.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

77 − 70 =