Uygulamamda her makinede bir uygulama klasöründe bazı dosyalar saklıyorum. Bu makineden yapılan son oturumların hatırlamak (makineye özgü bazı verileri kaydetmek: Bunu kullanmak nedenCSIDL'nin seçtiği yönetici olmayan kullanıcılara da erişilebilecek bir uygulama klasörü almak için SHGetSpecialFolderPath kullanımı?
..\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)
Yani görebilirsiniz:
gerçek durumda bir basitleştirilmiş versiyonu şudur bir tür MRU), Çeviri dizelerini veya 3. taraf bileşenlerini (bunlar exe kaynaklarından ayıklanan çalışma zamanıdır) ve kullanıcıya özgü verileri (form boyutu gibi) kaydetmek için kullanılır. Gerçek durum daha karmaşıktır, ancak en azından bazı "ortak klasör" ve bazı "kullanıcı klasörleri" vardır.
Şimdi bu yapıyı korumak istiyorum, bu yüzden tüm dosyalarım tek bir klasörde .. \ Project1 klasörü (+ alt klasörleri). Kullanıcılar windows kullanıcıları olmasa bile, SQL Server kullanıcılarıdır.
Soruma ..\
için hangi klasör seçilir.
Şu anda
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;
..\
retrieveing için bu kodu kullanarak (başarılı) değilim Ve ben CDISL listesi here tanımlanır
GetSpecialFolder(CSIDL_APPDATA)
ile diyoruz.
GetSpecialFolder(CSIDL_APPDATA)
döner
Windows 7'de C:\Users\username\AppData\Roaming
Yani bu çalışırdım, ama son zamanlarda doğrudan bu klasörlerde/yazma sorunları okumak için ilgili görünen bazı müşteriden bazı şikayeti almıştır. (örneğin, C:\Users\username\AppData\Roaming\Project1\LoginHistory
- yukarıda listelenen klasörleri kullanarak).
Bu yüzden sorum şu: CSIDL_APPDATA
kullanmak doğru mu? Başka bir önerin var mı? Bazı işletim sistemlerinde veya bazı kullanıcılarda gerçekten azaltılmış ayrıcalıklarla bu klasörde okuma/yazma sorunları olabileceği ihtimali var mıdır?
Dosyalarım için birden fazla kök klasörün olmasını istemediğimi lütfen unutmayın.
Kullanıcıların orada yazabilmesi gerekir. Aksi halde tüm sistem bozulur. Dosya yazmadan önce eksik dizinler oluşturmanız gerekebilir. Bize hata kodu ve mesajını söylemezseniz hata ayıklamak zor! –
Evet, kullanıcı elbette yazamıyorsa, tüm fikir çalışmıyor. Sorunu yeniden üretemiyorum, birisinin bu problemi olduğu söylendi, bu yüzden sebebin ne olduğunu tahmin etmeye çalışıyorum. Probabyl Ben daha fazla araştırmak için bir şansım olacak, ama şimdi değil. Bu yüzden sordum. – LaBracca