Difference between revisions of "Имена файлов"

From SunFlurry wiki
Jump to: navigation, search
1>Admin
m (1 revision imported)
 
(No difference)

Latest revision as of 08:44, 27 November 2023

Файлы могут находиться как на локальном диске компьютера, на котором запущен клиент базы данных, в этом случае, к файлу имеет доступ только конкретный пользователь, так и на дисках компьютера, на котором работает серверная часть системы, к таким файлам могут иметь доступ все пользователи системы. Для адресация обоих типов файлов используется разница между абсолютным адресом файла (в этом случае будет выполнен доступ к локальному файлу на клиентской машине) и относительным адресом файла (в этом случае, задается путь к файлам конфигурации на серверной машине). Если клиент не использует сервер (локальный консольный клиент без доступа к БД), все файлы будут адресованы на локальном компьютере.
Для разделителя в именах файла используется знак обратного деления \. Для адресации файлов, находящихся в сети, имя должно начинаться с двух знаков "\" (пример \\Server\Folder1\file.txt), для адресации файла на локальном диске, первым символом адреса должно следовать имя локального диска, затем знак : (пример C:\Folder1\file.txt).
Некоторые функции работы с модулями или таблицами (к примеру, LoadModule, LoadToolForm, SetSourceName и др.) позволяют указывать путь внутри текущего или нового внешнего объекта. Для указания на сам объект используется стандартный локальный или серверный путь, оканчивающийся файлом объекта (к примеру, C:\Обработки\Объект.sfo). Элементы пути внутри объекта начинаются и разделяются знаком деления -- / (пример c:\Обработки\Объект.sfo/Формы/MyForm). При этом, функции LoadModule, LoadToolForm, SetSourceName и др. автоматически добавляют к пути внутри объекта часть "/Modules/FreeForms", поэтому указывать эту часть необязательно. Если путь на сам объект не указан, система использует объект в контексте которого происходит исполнение в данный момент (к примеру /NewForm), если исполнение не происходит в контексте какого-либо объекта, функция вызовет исключение. Пример вызова функции LoadModule, с модулем и формой, находящимися в папке "/Modules/FreeForms": LoadModule(1,"C:\Обработки\Объект.sfo/",0,0,"Module","Form") (использование как минимум одного знака "/" говорит, что обращение идет к внешнему объекту, а не к папке с именем "Объект.sfo".

Более подробно о разнице между серверными и локальными именами файлов:

  • Если имя файла начинается на ?:, \\, "?: или "\\, доступ к такому файлу будет осуществлен локально. К примеру, FileToString("C:\file.txt").
  • В ином случае, файл будет адресован на серверной строне. К примеру, FileToString("Temp\file.txt"). Сервер предоставляет доступ по запросу клиентов к папкам, которые находятся внутри локальной папки, в которой располагается конфигурация (папка, в которой находится файл dbase.ini). Доступ вне этой папки не предоставляется. Папки, которые можно использовать для хранения данных на сервере:
    • Temp: папка создается сервером автоматически, в ней можно создавать подпапки и хранить временные и постоянные данные к которым необходимо иметь доступ с любого клиентского рабочего места. Несмотря на название, эта папка не используется для хранения временных файлов операционной системы, ее содержимое не изменяется серверной частью автоматически.
    • Modules: внутри этой папки располагаются файлы конфигурации. Дополнительные файлы, записанные в эту папку с клиентских машин, будут удалены при обновлении конфигурации, поэтому, доступ имеет смысл осуществлять только для чтения. Доступ к некоторым файлам этой папки (исходные тексты и пр.) в режиме ограниченного доступа запрещен.
    • LocalConfig: внутри этой папки находится основной файл метаданных, производить изменения в этой папке не рекомендуется. Доступ к большинству файлов этой папки в режиме ограниченного доступа запрещен.
    • UserSettings: папка хранит установки визуальных форм, личные настройки и прочее для каждого из пользователей системы. Внутри находятся подпапки пользователей. Чтобы получить путь к личной папке текущего пользователя, можно использовать функцию GetUserDirectory. Программа-клиент может создавать подпапки и считывать и записывать данные, которые не должны удаляться между сессиями, для каждого из пользователей.
    • Иные папки специального назначения можно задать в установках проекта на закладке "Компиляция и сервер". Папки, которые не перечислены в этой установке и неизвестны серверу, будут удалены при обновлении конфигурации.