Сохранение данных приложения и пользователя
Статья-оригинал: delphi.about.com
Перевод статьи: Вадим К
Получение специальных каталогов, используя Delphi
Когда ваше Delphi-приложение нуждается в том, чтобы сохранить некоторую информацию на жёсткий диск пользователя, Вы должны быть осторожны, и должны разделять сохранение пользовательских данных, настроек для пользователя и настроек для компьютера.
Например, в Windows для сохранения специфических для приложения файлов, таких как INI-файлы, файлы состояния программы, временные файлы и т.п., должен быть использован каталог "Application Data".
Крайне нежелательно использовать жёстко прописанные пути вроде "C:\Program Files". При сохранении файлов в этом каталоге, приложение вряд ли будет корректно работать в других версиях Windows, потому что этот путь может быть изменён в следующих версиях Windows, либо пользователь может установить ОС на другой диск. К тому же, Windows Vista может не дать доступ ко многим каталогам. Даже пользователю с правами администратора.
WinAPI-функция SHGetFolderPath
Функция SHGetFolderPath определенна в модуле SHFolder. SHGetFolderPath возвращает полный путь к указанному специальному каталогу по его идентификатору.
Ниже приведена функция-обёртка для SHGetFolderPath, чтобы было проще получить стандартные каталоги (для всех пользователей или только для текущего пользователя).
uses SHFolder; ... function GetSpecialFolderPath(folder : integer) : string; const SHGFP_TYPE_CURRENT = 0; var path: array [0..MAX_PATH] of char; begin if SUCCEEDED(SHGetFolderPath(0,folder,0,SHGFP_TYPE_CURRENT,@path[0])) then Result := path else Result := ''; end;
Теперь создадим приложение для использования функции SHGetFolderPath:
|
//RadioGroup1 OnClick procedure TForm1.RadioGroup1Click(Sender: TObject); var index : integer; specialFolder : integer; begin if RadioGroup1.ItemIndex = -1 then Exit; index := RadioGroup1.ItemIndex; case index of //[Current User]My Documents 0: specialFolder := CSIDL_PERSONAL; //All UsersApplication Data 1: specialFolder := CSIDL_COMMON_APPDATA; //[User Specific]Application Data 2: specialFolder := CSIDL_LOCAL_APPDATA; //Program Files 3: specialFolder := CSIDL_PROGRAM_FILES; //All UsersDocuments 4: specialFolder := CSIDL_COMMON_DOCUMENTS; end; Label1.Caption := GetSpecialFolderPath(specialFolder) ; end;
Примечание: "[Текущий пользователь]" - это имя пользователя, сеанс которого в данный момент активен в Windows.
Функция SHGetFolderPath является более расширенным вариантом функции SHGetSpecialFolderPath.
Программа не должна сохранять свою информацию (временные файлы, пользовательские настройки, файлы конфигурации приложения, и т.д.) в каталоге My Documents (Мои документы), либо в каталоге самого приложения (т.е. в одном из подкаталогов Program Files). Следует использовать специальный каталог в Application Data, отведённый именно для Вашего приложения. Как правило, его имя совпадает с именем каталога программы в Program Files).
Всегда создавайте подкаталог только в тех путях, которые возвращает функция SHGetFolderPath! Как правило, каталог создаётся такой: "\Application Data\Название компании\Название продукта\Версия продукта".
Пример программы с использованием функции, описанной в статье, можно загрузить здесь.
Автор: Вадим К
Статья добавлена: 29 октября 2007
Следующая статья: Преобразование текста с помощью регулярных выражений »
Зарегистрируйтесь/авторизируйтесь,
чтобы оценивать статьи.
Для вставки ссылки на данную статью на другом сайте используйте следующий HTML-код:
Ссылка для форумов (BBCode):
Быстрая вставка ссылки на статью в сообщениях на сайте:
{{a:41}} (буква a — латинская) — только адрес статьи (URL);
{{статья:41}} — полноценная HTML-ссылка на статью (текст ссылки — название статьи).
Поделитесь ссылкой в социальных сетях:
Комментарии читателей к данной статье
Пока нет комментариев к данной статье. Оставьте свой и он будет первым.
Оставлять комментарии к статьям могут только зарегистрированные пользователи.