2011-04-02 6 views
5

तो Icon.ExtractAssociatedIcon(filePath)the only way नेट & & में आइकन पाने के लिए अगर यह ड्राइव और निर्देशिकाएँ (यह क्या है?) के लिए काम नहीं करता है तो आप उन्हें कैसे के लिए प्रतीक करने के बारे में जाते हैं?ड्राइव और निर्देशिकाओं के आइकन प्राप्त करना: Icon.ExtractAssociatedIcon (filePath) काम नहीं करता है?

दूसरे शब्दों में, मैं

foreach (string driveName in Directory.GetLogicalDrives()) 
//if (System.IO.Directory.Exists(driveName)) 
{ 
    using (System.Drawing.Icon systemIcon = System.Drawing.Icon.ExtractAssociatedIcon(driveName)) 
    { ... } 
} 

^इस स्पष्ट रूप से काम नहीं करता है करना चाहते हैं (केवल फ़ाइलों के लिए काम करता है)

मुझे यकीन है कि System.IO.Directory.Exists(file) अगर पता लगाने के लिए सही तरीका है नहीं कर रहा हूँ ड्राइव भी मौजूद हैं ...

+0

कि जुड़ा हुआ सवाल यह ** नेटवर्क ** फाइलों पर काम नहीं करता है, dirs आदि आप नहीं एक pInvoking समाधान चाहते हैं के अनुसार ?? साथ ही, आप जांच क्यों करेंगे कि फ़ाइल * मौजूद है * जब .NET ने इसे आपके लिए सूचीबद्ध किया है? – gideon

+0

@Giddy, इसके बारे में खेद है, foreach को छोड़कर सब कुछ अपने ही वर्ग में था, और अगर सुरक्षा के लिए था। इसके अलावा, मैं एक pInvoking समाधान चाहते हैं। :) – Spectraljump

+0

हूप्सिस, मैंने अपना जवाब हटा दिया (चूंकि यह गलत था)। मुझे लगता है कि @ हाजबान का जवाब सही होना चाहिए। – gideon

उत्तर

11

इसे .NET एप्लिकेशन से करने के लिए, आपको Windows API से SHGetFileInfo function को P/Invoke करना होगा (इसे shell32.dll में परिभाषित किया गया है)।

यहां कुछ नमूना कोड पता चलता है कि यह कैसे करना है: Getting Associated Icons Using C#

+0

धन्यवाद दोस्त! मैं जल्द ही कोशिश करूँगा। लेकिन, क्या मैं पूछ सकता हूं, फ़ाइल आइकन के विपरीत इन आइकनों को प्राप्त करने के लिए वास्तव में "इतना कठिन" क्यों है (जहां आप क्लासिक विधि का उपयोग कर सकते हैं)? मेरा मतलब है, आपके फ़ोल्डर्स मेनू में फ़ोल्डर के लिए आपके पास "चेंज आइकन" भी है। – Spectraljump

+1

@Twodordan: यह "इतना कठिन" नहीं है। यह बिल्कुल मुश्किल नहीं है। विंडोज एपीआई इस उद्देश्य के लिए स्पष्ट रूप से एक फ़ंक्शन प्रदान करता है, आपको बस इसे कॉल करना है। अब, यदि आपका प्रश्न है, ".NET Framework द्वारा इस कार्यक्षमता का खुलासा क्यों नहीं किया गया है", यह एक अलग प्रश्न है। Win32 API में * सबकुछ * प्रबंधित कोड में पुनः लागू नहीं किया गया है। न केवल यह एक पागल उपक्रम होगा, लेकिन यह इतना उपयोगी नहीं है। इन तरह के कार्यों को शायद ही कभी .NET अनुप्रयोगों द्वारा उपयोग किया जाता है, और यदि आपको उनकी आवश्यकता है, तो आप बस P/Invoke कर सकते हैं। पी/Invoke वहाँ एक कारण सामने है; यह एक दुर्घटना नहीं थी। –

+0

धन्यवाद गैरी। जितना अधिक आप जानते हैं...! – Spectraljump

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