Разработчики, использующие язык программирования Object Pascal (Delphi), иногда сталкиваются с проблемой записи INI-файлов на операционных системах Windows Vista и выше. В этом руководстве мы рассмотрим, как обеспечить совместимость вашего приложения, написанного на Delphi, для работы в этих ОС.
Изменение политики доступа к файлам
В Windows Vista был изменен подход к управлению доступом пользователей к определенным папкам. В частности, программа не может записывать данные в каталог, где она установлена (например, C:\Program Files). Это означает, что использование INI-файлов для хранения настроек приложения в этом каталоге больше не является возможным.
Использование AppData
Для решения этой проблемы рекомендуется использовать папку AppData, которая предназначена для хранения пользовательских данных. В Delphi это можно сделать, используя функцию ShGetSpecialFolderPath с параметром CSIDL_APPDATA. Это позволяет получить путь к каталогу, где приложение может безопасно записывать свои INI-файлы.
function TSettingsForm.AppDataPath: string;
var
r: Bool;
path: array[0..Max_Path] of Char;
begin
r := ShGetSpecialFolderPath(0, path[0], CSIDL_APPDATA, False);
if r then
Result := path
else
Result := '';
end;
Создание каталогов
При работе с папкой AppData важно убедиться, что все необходимые подкаталоги существуют перед записью INI-файла. В Delphi для создания нескольких уровней вложенности каталогов можно использовать функцию ForceDirectories.
procedure TSettingsForm.SetIniFilename;
var
filename: string;
begin
filename := 'key.ini';
var path: string = AppDataPath + '\MyCompanyName\ProductName\';
if not DirectoryExists(path) then
ForceDirectories(path);
inifilename := path + filename;
end;
Пример кода для сохранения настроек
procedure TSettingsForm.SaveSettings;
var
appINI: TIniFile;
begin
appINI := TIniFile.CreateIniFilename(inifilename);
try
// Предполагается, что edt_low и edt_high - это компоненты Edit,
// содержащие числовые значения для сохранения.
low := trunc(edtLow.Value);
high := trunc(edtHigh.Value);
appINI.WriteInteger('SPEED', 'LOW', low);
appINI.WriteInteger('SPEED', 'HIGH', high);
// Другие настройки...
finally
appINI.SaveToFile;
appINI.Free;
end;
end;
Заключение
Используя AppData и функции Delphi для работы с каталогами, вы можете обеспечить совместимость вашего приложения с Windows Vista и более новыми версиями ОС. Это позволит избежать проблем с записью INI-файлов и гарантировать корректную работу приложений на различных платформах.
Подтвержденный ответ
Для сохранения настроек в операционных системах Windows Vista и выше, следует использовать директорию AppData. Для создания необходимой структуры каталогов можно воспользоваться функцией ForceDirectories, а для работы с INI-файлами - классами TIniFile из стандартной библиотеки Delphi.
Иногда разработчикам, использующим язык программирования Object Pascal (Delphi), приходится адаптировать свои приложения для работы с INI-файлами в операционных системах Windows Vista и выше, что связано с изменениями политики доступа к файлам.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.