उपर्युक्त के रूप में, मैं सी का उपयोग कर विंडोज में ऐपडाटा फ़ोल्डर कैसे प्राप्त करूं?सी में% AppData% फ़ोल्डर कैसे प्राप्त करें?
मुझे पता है कि सी # के लिए आप Environment.SpecialFolder.ApplicationData
उपर्युक्त के रूप में, मैं सी का उपयोग कर विंडोज में ऐपडाटा फ़ोल्डर कैसे प्राप्त करूं?सी में% AppData% फ़ोल्डर कैसे प्राप्त करें?
मुझे पता है कि सी # के लिए आप Environment.SpecialFolder.ApplicationData
SHGetSpecialFolderPathCSIDL वांछित फ़ोल्डर (शायद CSIDL_APPDATA या CSIDL_LOCAL_APPDATA) पर सेट के साथ SHGetSpecialFolderPath का उपयोग करें।
आप नए SHGetFolderPath() और SHGetKnownFolderPath() फ़ंक्शंस का भी उपयोग कर सकते हैं। SHGetKnownFolderIDList() भी है और यदि आपको COM पसंद है तो IKnownFolder::GetPath() है।
का उपयोग अगर मैं सही ढंग याद यह सिर्फ होना चाहिए
#include <stdlib.h>
getenv("APPDATA");
संपादित करें: बस की दोबारा जांच कर, ठीक काम करता है!
इसके बजाय उचित एपीआई का उपयोग करें, क्योंकि विंडोज पर पर्यावरण चर एक अनुबंध से अधिक सौजन्यपूर्ण हैं। वे सभी परिस्थितियों में उपस्थित नहीं हो सकते हैं। हालांकि, 'SHGetKnownFolderPath' * आपको * हर बार पथ देगा। – Joey
लेकिन SHGetKnownFolderPath या तो उपलब्ध नहीं हो सकता है। कठिन कुकीज़ –
@ हंस: हालांकि, SHGetSpecialFolderPath होना चाहिए। ओएस एक लक्ष्य के आधार पर। – Joey
आप these functions उपयोग कर सकते हैं:
#include <stdlib.h>
char *getenv(
const char *varname
);
wchar_t *_wgetenv(
const wchar_t *varname
);
तो जैसा
:
#include <stdio.h>
char *appData = getenv("AppData");
printf("%s\n", appData);
इसके बजाय उचित एपीआई का उपयोग करें, क्योंकि विंडोज पर पर्यावरण चर एक अनुबंध से अधिक सौजन्यपूर्ण हैं। वे सभी परिस्थितियों में उपस्थित नहीं हो सकते हैं। हालांकि, 'SHGetKnownFolderPath' * आपको * हर बार पथ देगा। – Joey
प्रति-प्रक्रिया के आधार पर पर्यावरण चर को ओवरराइड करने में सक्षम होना उपयोगी है। आप क्यों कहते हैं कि वे "अनुबंध से अधिक सौजन्य" हैं?क्या इस प्रभाव के लिए कुछ आधिकारिक या अर्ध-आधिकारिक दस्तावेज़ीकरण है? –
शायद समय के सबसे अधिक काम करेंगे %APPDATA%
वातावरण चर का उपयोग करना। हालांकि, अगर आप इसे आधिकारिक विंडोज़ तरीके से करना चाहते हैं, तो आपको अपनी आवश्यकताओं के आधार पर CSIDL मान CSIDL_APPDATA
या CSIDL_LOCAL_APPDATA
पास करने के लिए SHGetFolderPath
function का उपयोग करना चाहिए।
यह है कि Environment.GetFolderPath()
विधि .NET में उपयोग की जा रही है।
संपादित करें: जॉय सही ढंग से इंगित करता है कि इसे विंडोज Vista में SHGetKnownFolderPath द्वारा प्रतिस्थापित किया गया है। मेरे लिए समाचार :-)।
नमूना कोड:
TCHAR szPath[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(NULL,
CSIDL_APPDATA | CSIDL_FLAG_CREATE,
NULL,
0,
szPath)))
{
PathAppend(szPath, TEXT("MySettings.xml"));
HANDLE hFile = CreateFile(szPath, ...);
}
CSIDL_APPDATA = उपयोगकर्ता नाम \ Application Data। में खिड़की 10: उपयोगकर्ता नाम \ AppData \ रोमिंग
CSIDL_FLAG_CREATE = CSIDL_ मूल्य के साथ गठबंधन SHGetFolderPath() में फ़ोल्डर निर्माण के लिए मजबूर करने
तुम भी उपयोग कर सकते हैं:
CSIDL_LOCAL_APPDATA = उपयोगकर्ता नाम \ Local Settings \ अनुप्रयोग डेटा (गैर रोमिंग)
ध्यान दें कि यह फ़ंक्शन पहले से ही दो बार हटा दिया गया था। आप अन्य दो (वर्तमान और अनुशंसित फ़ंक्शन सहित) भी दे सकते हैं। – Joey
@ जॉय - मुझे यह एहसास नहीं हुआ था। धन्यवाद। – Ferruccio