XP के लिए में Windows से इस पथ पर लौटने के लिए, विंडोज SHGetFolderPath() प्रदान करता है सकते हैं का जवाब एक ज्ञात स्थान प्राप्त करने के लिए ।
फाइल सिस्टम निर्देशिका कि सभी उपयोगकर्ताओं के लिए आवेदन डेटा शामिल हैं: CSIDL कि आप देख रहे हैं CSIDL_COMMON_APPDATA
, के रूप में वर्णित है। एक सामान्य पथ "C:\Documents and Settings\All Users\Application Data"
है। यह फ़ोल्डर एप्लिकेशन डेटा के लिए उपयोग किया जाता है जो उपयोगकर्ता विशिष्ट नहीं है। उदाहरण के लिए, कोई एप्लिकेशन वर्तनी-जांच शब्दकोश, क्लिप आर्ट का डेटाबेस, या CSIDL_COMMON_APPDATA
फ़ोल्डर में लॉग फ़ाइल संग्रहीत कर सकता है। यह जानकारी घूमती नहीं है और कंप्यूटर का उपयोग कर किसी के भी उपलब्ध है।
Vista के लिए और बाद में, इस SHGetKnownFolderPath() के साथ बदल दिया गया है, हालांकि SHGetFolderPath() अभी भी उस के लिए एक आवरण समारोह के रूप में उपलब्ध है। यदि आप वास्तविक Vista कॉल का उपयोग करते हैं, तो आपको CSIDL_COMMON_APPDATA
के बजाय FOLDERID_ProgramData
का उपयोग करना चाहिए।
यह लिंक here ऐसा करने का एक तरीका दिखाता है।
यह इस के लिए नीचे उबालने के लिए लगता है (एहतियात के साथ इस इलाज, मैं डेल्फी कि अच्छी तरह से पता नहीं है):
function ShGetKnownFolderPath (
const rfid: TGUID;
dwFlags: DWord;
hToken: THandle;
out ppszPath: PWideChar): HResult;
var
Shell: HModule;
Fn: TShGetKnownFolderPath;
begin
Shell := LoadLibrary ('shell32.dll');
Win32Check(Shell <> 0);
try
@Fn := GetProcAddress (Shell, 'SHGetKnownFolderPath');
Win32Check (Assigned (Fn));
Result := Fn (rfid, dwFlags, hToken, ppszPath);
finally
FreeLibrary (Shell);
end;
end;
function GetKnownFolderPath (
const rfid: TGUID;
dwFlags: DWord;
hToken: THandle): WideString;
var
buffer: PWideChar;
ret: HResult;
begin
ret :=ShGetKnownFolderPath (rfid, dwFlags, hToken, buffer);
OleCheck (ret);
try
Result := buffer;
finally
CoTaskMemFree (buffer);
end;
end;
This page सभी CSIDL_*
की एक सूची प्रदान और मूल्य। ध्यान रखें कि आपको अपने उपयोगकर्ता-विशिष्ट डेटा के लिए इन फ़ंक्शंस का उपयोग करना चाहिए, हार्ड-कोडेड मान जैसे "C:\Documents and Settings\<CurrentUser>\Application Data\"
। हो सकता है कि विंडोज के विभिन्न भाषा संस्करण अलग-अलग निर्देशिका नामों का उपयोग करें या यह संभव है कि उपयोगकर्ता आसानी से अपने डेटा क्षेत्रों को स्थानांतरित कर सकें।
यह सही API है, और सही स्थिति में इस स्थिति में पूछने के लिए। हालांकि, अभी भी स्पष्ट करने की आवश्यकता की तुलना में एक बात है: - उस स्थान पर बनाई गई फ़ाइलें प्रशासक और मालिकों के लिए आरडब्ल्यू हैं, लेकिन अन्य उपयोगकर्ताओं के लिए आर। क्या यह महत्वपूर्ण है कि प्रत्येक _user_ (यानी गैर यूएसी उन्नत व्यवस्थापक या उपयोगकर्ता) आईएनआई फ़ाइल में लिख सकते हैं? यदि ऐसा है, तो सृजन पर, फ़ाइल या फ़ोल्डर की एक्सेस कंट्रोल सूची को समायोजित करने के लिए आवश्यक सभी उपयोगकर्ताओं को आरडब्ल्यू प्रविष्टि शामिल करना आवश्यक है। –
ओच! क्रिस के सिर के लिए धन्यवाद ... तो मैं यह कैसे करूँ? या क्या कोई बेहतर स्थान है जिसमें यह प्रतिबंध नहीं है? – CodeAndCats
नहीं, यह सबसे अच्छा स्थान है। यदि आप चाहते हैं कि उपयोगकर्ता ओवरराइड सिस्टम बनाने से सेटिंग्स संपादित करें। डिफ़ॉल्ट और सामान्य सेटिंग्स "सभी उपयोगकर्ता" फ़ोल्डर में हैं और उपयोगकर्ता उपयुक्त उपयोग प्रोफ़ाइल में विशिष्ट हैं। इस तरह आपके पास वैश्विक रीड-ओनली सेटिंग्स हैं जो उपयोगकर्ता स्वयं के साथ ओवरराइड कर सकते हैं। इस तरह वे एक-दूसरे की सेटिंग्स को नहीं बदलते हैं। – Runner