2010-03-08 10 views
7

पर सभी उपयोगकर्ताओं के लिए सबसे अच्छा फ़ोल्डर ढूँढना हम एक गेम बना रहे हैं जो जल्द ही एक स्तर संपादक सुविधा जोड़ देगा। हम चाहते हैं कि उपयोगकर्ता किसी फ़ोल्डर में डाउनलोड किए गए स्तर डालने में सक्षम हो और फिर बिना किसी परेशानी के खेल में खेल सके। तो, हम एक फ़ोल्डर की तलाश में हैं जो कोई भी ढूंढ सकता है, खोल सकता है, लिख सकता है, पढ़ सकता है, और बहुउद्देशीय है। विंडोज विस्टा/7 पर, फ़ोल्डर/उपयोगकर्ता/सार्वजनिक/एक महान उम्मीदवार की तरह दिखते हैं। हालांकि, यह .NET enum System.Environment.SpecialFolder में सूचीबद्ध नहीं है। मैंने उन सभी के माध्यम से जाना है, और विभिन्न विंडोज संस्करणों पर जो कुछ भी पैदा किया है, उसकी जांच की है, और कोई भी मेरी आवश्यकताओं तक नहीं जीता है।विंडोज मशीन

मुझे पर्यावरण मिला। SpecialFolder.CommonAplicationData, जो कि काम करता है, लेकिन वह फ़ोल्डर छिपा हुआ है (सी: \ प्रोग्रामडेटा) और मुझे लगता है कि अधिकांश उपयोगकर्ता छिपे हुए फ़ोल्डरों को प्रदर्शित नहीं करते हैं।

जैसा कि यह अभी खड़ा है, ऐसा लगता है कि हमें व्यक्तिगत दस्तावेज़ फ़ोल्डर के लिए बसना होगा, लेकिन हम वास्तव में एक बहु उपयोगकर्ता फ़ोल्डर पसंद करेंगे।

किसी के पास कोई सुझाव है?

(हार्ड कोडिंग सी: \ Users \ लोक \ सवाल से बाहर है, यह केवल अंग्रेज़ी सिस्टम पर काम करेंगे)

उत्तर

8

डौग हेनिंगfinding the path for C:\Users\Public पर:

वहाँ ताकि आप यह निर्धारित करने के GETENV ('सार्वजनिक') का उपयोग कर सकते हैं, यह करने के लिए इस फ़ोल्डर के लिए एक CSIDL मूल्य है, लेकिन वातावरण चर सार्वजनिक अंक नहीं है इसके स्थान। डिफ़ॉल्ट रूप से, इस चर में Windows Vista में C: \ Users \ Public शामिल है। वेरिएबल Windows XP में मौजूद नहीं है, इसलिए आपके कोड को उस मामले को संभालना होगा जहां GETENV ('PUBLIC') रिक्त मान देता है।

वैकल्पिक रूप से, आप CSIDL_COMMON_DOCUMENTS द्वारा निर्दिष्ट फ़ोल्डर के अभिभावक का उपयोग कर सकते हैं, जो सी: \ दस्तावेज़ और सेटिंग्स \ XP और C: \ Users \ Vista \ Vista पर सभी उपयोगकर्ता \ दस्तावेज़ देता है।

मुझे लगता है कि Environment.SpecialFolder.CommonDocuments आपकी फ़ाइलों के लिए सही जगह हो सकती है।

+0

CommonDocuments के साथ काम करने के लिए किसी व्यवस्थापक की आवश्यकता होगी भयानक लग रहा है, लेकिन यह .net 4.0 है, और मैं मोनो 1.2.5 (जो .net 2.0 की तरह है) का उपयोग कर रहा है, इसलिए मैं उपरोक्त की तरह कुछ करना होगा। धन्यवाद। – reallyjoel

+0

CSIDL_COMMON_DOCUMENTS उपयुक्त सीएसआईडीएल मान है। –

1

आप आवेदन की निर्देशिका में एक फ़ोल्डर डाल सकता है, तो हर एक के लिए यह करने के लिए एक शॉर्टकट बना उपयोगकर्ता (जब वे पहली बार सुविधा का उपयोग करते हैं) अपनी होम निर्देशिका में? मुझे पता है कि यह काफी "सार्वभौमिक" पूर्व-मौजूदा फ़ोल्डर नहीं है जिसे आप चाहते थे, लेकिन क्या यह वैसे भी काम करेगा?

+1

आप आवेदन की निर्देशिका –

4

निम्नलिखित पिछले OSes के लिए Vista/Win7 पर C:\Users\Public\Documents\ और C:\Documents and Settings\All Users\Documents लौटना चाहिए।

[System.Runtime.InteropServices.DllImport("shell32.dll")] 
static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, 
uint dwFlags, [Out] StringBuilder pszPath); 

public string GetSharedDocsFolder() { 
StringBuilder sb = new StringBuilder(); 
int CommonDocumentsFolder = 0x002e; 

SHGetFolderPath(IntPtr.Zero, CommonDocumentsFolder, IntPtr.Zero, 0x0000, sb); 
return sb.ToString(); 
} 
+0

यह डरावना दिखता है .. – reallyjoel

+1

ध्यान दें कि डिफ़ॉल्ट रूप से सभी उपयोगकर्ता इस स्थान पर लिख सकते हैं, लेकिन उपयोगकर्ता किसी भिन्न उपयोगकर्ता द्वारा बनाई गई फ़ाइलों या फ़ोल्डर्स पर नहीं लिख सकते हैं। यदि आप एकाधिक गैर-व्यवस्थापक उपयोगकर्ताओं को एक ही फ़ाइल को संशोधित करने में सक्षम होना चाहते हैं, तो आपको फाइलिंग सिस्टम में फ़ाइल/फ़ोल्डर कहां बनाते हैं, इस पर ध्यान दिए बिना आपको अनुमतियों को स्पष्ट रूप से प्रबंधित करना होगा। –

संबंधित मुद्दे