В моем приложении я храню на каждой машине несколько файлов в папке приложения.
Упрощенная версия реального случая такова:
..\Project1\LoginHistory (login history file - common for all users)
..\Project1\Translations (localization files - common for all users)
..\Project1\FormSettings\User1\ (this contains an ini file per form for User1)
..\Project1\FormSettings\UserN\ (this contains an ini file per form for UserN)
Итак, вы можете понять, почему я использую это: чтобы сохранить некоторые данные, относящиеся к машине (помните последние входы в систему, сделанные с этой машины, своего рода MRU), для хранения строк перевода или сторонних компонентов (они извлекаются из среды выполнения из ресурсов exe) и для сохранения некоторых пользовательских данных ( нравится размер формы). Реальный случай более сложный, но, по крайней мере, вы можете понять, что есть несколько «общих папок» и несколько «пользовательских папок».
Теперь я хотел бы сохранить эту структуру, чтобы все мои файлы были в одном .. \ Папка Project1 (+ подпапки). Даже потому, что пользователи не являются пользователями Windows, а являются пользователями SQL Server.
Мой вопрос в том, какую папку выбрать для .. \
.
В настоящее время я (успешно) использую этот код для получения .. \
uses ShlObj;
function GetSpecialFolder(const CSIDL: integer) : string;
var
RecPath : PWideChar;
begin
RecPath := StrAlloc(MAX_PATH);
try
FillChar(RecPath^, MAX_PATH, 0);
if SHGetSpecialFolderPath(0, RecPath, CSIDL, false)
then result := RecPath
else result := '';
finally
StrDispose(RecPath);
end;
end;
И я вызываю его с помощью
GetSpecialFolder(CSIDL_APPDATA)
Где список CDISL определен здесь .
GetSpecialFolder (CSIDL_APPDATA)
возвращает C: \ Users \ username \ AppData \ Roaming
в Windows 7.
Раньше это работало, но недавно я получил некоторую жалобу от одного клиента, которая, кажется, напрямую связана с проблемы чтения / записи в этих папках. (например, C: \ Users \ username \ AppData \ Roaming \ Project1 \ LoginHistory
- с использованием папок, перечисленных выше).
Итак, мой вопрос: правильно ли использовать CSIDL_APPDATA
? У вас есть еще одно предложение? Есть ли вероятность, что в какой-то ОС или у некоторых пользователей с действительно ограниченными правами могут возникнуть проблемы с чтением / записью в этой папке?
Пожалуйста, помните, что я не хотел бы иметь более одной корневой папки для моих файлов.