Понедельник, 29.04.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нашли свой исходник?
Всего ответов: 94
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Система » WinAPI

Сохранение данных приложения и пользователя

Получение специальных каталогов, используя 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:

  • Положим на форму TRadioGroup ("RadioGroup1");
  • Положим на форму TLabel ("Label1")
  • Добавим пять элементов в RadioGroup (свойство Items):
    1. "[Текущий пользователь]\My Documents"
    2. "All Users\Application Data"
    3. "[User Specific]\Application Data"
    4. "Program Files"
    5. "All Users\Documents"
  • Добавим обработчик события OnClick для RadioGroup.

//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\Название компании\Название продукта\Версия продукта".

Пример программы с использованием функции, описанной в статье, можно загрузить здесь.

Получить ссылку на материал

Категория: WinAPI | Добавил: Барон (20.12.2011)
Просмотров: 1713 | Теги: сохранение, данные | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
ActiveX [10]
CORBA и COM [16]
Kol и MCK [23]
WinAPI [28]
Компоненты [27]
Работа с Bluetooth [4]
Железо [8]
Текст [18]
Разное [98]
Королевство Delphi © 2010-2024
Яндекс цитирования