दिलचस्प पोस्ट
कैसे पीईएम फ़ाइल से निजी कुंजी प्राप्त करने के लिए? Log4j फ़ाइलों को संकुचित करें कैसे एक टीसीपी पोर्ट को PHP का उपयोग करने के लिए सुनने के लिए? अस्थिर क्यों मौजूद है? परियोजना निर्भरता के भाग के रूप में गतिशील रूप से जेनरेट की गई फ़ाइलों को कॉपी करने के लिए MSBuild ग्रुप बाय क्लॉज में दिखना चाहिए या एक समग्र फ़ंक्शन में उपयोग किया जाना चाहिए PostgreSQL अनुक्रमणिका सरणी स्तंभ कर सकते हैं? मैं अजगर 2 और 3 को विंडोज 7 में कैसे चला सकता हूं? एंड्रॉइड क्लासNotFoundException: पथ पर वर्ग नहीं मिला .htaccess रीडायरेक्ट को रीडायरेक्ट रूट यूआरएल को उपनिर्देशिका में डालें क्या वेब साइट्स को वास्तव में ब्राउज़रों के लिए पूरा करने की आवश्यकता है जिनके पास जावास्क्रिप्ट सक्षम नहीं है? MySQL में 2 घंटे वर्तमान समय में जोड़ें? ओपनसीवी में बीफ़डेड इमेज को बदलना java.util.zip – डायरेक्टरी संरचना का पुन: निर्माण करना एप्लिकेशन को अनइंस्टॉल करने से पहले पासवर्ड मांगें

मैं एक एम्बेडेड संसाधन के "पथ" को कैसे खोज सकता हूं?

मैं एक विधानसभा में एक पीएनजी को एक एम्बेडेड संसाधन के रूप में संग्रहित कर रहा हूं। उसी विधानसभा के भीतर से मेरे पास कुछ कोड है:

Bitmap image = new Bitmap(typeof(MyClass), "Resources.file.png"); 

"File.png" नामित फ़ाइल, "संसाधन" फ़ोल्डर में (दृश्य स्टूडियो के भीतर) में संग्रहीत है, और इसे एक एम्बेडेड संसाधन के रूप में चिह्नित किया गया है

यह कोड अपवाद के साथ विफल रहता है:

संसाधन MyNamespace.Resources.file.png क्लास MyNamespace.MyClass में नहीं मिल सकता है

मेरे समान कोड (एक अलग विधानसभा में, एक अलग संसाधन लोड करने) जो काम करता है तो मुझे पता है कि तकनीक ध्वनि है मेरी समस्या यह है कि मैं यह समझने की कोशिश कर रहा हूं कि सही पथ क्या है। अगर मैं बस सही रास्ते खोजने के लिए असेंबली (जैसे डिबगर में) क्वेरी कर सकता था, जो मुझे सिरदर्द का भार बचाएगा।

Solutions Collecting From Web of "मैं एक एम्बेडेड संसाधन के "पथ" को कैसे खोज सकता हूं?"

यह आपको सभी संसाधनों का एक स्ट्रिंग प्राप्त करेगा:

 System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames(); 

मैं अपने आप को यह भूल सकता हूं कि हर बार ऐसा कैसे करना है, इसलिए मैं सिर्फ दो एक-लाइनर्स को लपेटता हूं जिनकी मुझे एक छोटी कक्षा में आवश्यकता है:

 public class Utility { /// <summary> /// Takes the full name of a resource and loads it in to a stream. /// </summary> /// <param name="resourceName">Assuming an embedded resource is a file /// called info.png and is located in a folder called Resources, it /// will be compiled in to the assembly with this fully qualified /// name: Full.Assembly.Name.Resources.info.png. That is the string /// that you should pass to this method.</param> /// <returns></returns> public static Stream GetEmbeddedResourceStream(string resourceName) { return Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName); } /// <summary> /// Get the list of all emdedded resources in the assembly. /// </summary> /// <returns>An array of fully qualified resource names</returns> public static string[] GetEmbeddedResourceNames() { return Assembly.GetExecutingAssembly().GetManifestResourceNames(); } } 

मुझे लग रहा है कि आपकी कक्षा एक अलग नाम स्थान में है इसका समाधान करने के लिए वैधानिक तरीका संसाधन वर्ग और दृढ़ता से टाइप किए गए संसाधन का उपयोग करना होगा:

 ProjectNamespace.Properties.Resources.file 

संसाधन जोड़ने के लिए IDE के संसाधन प्रबंधक का उपयोग करें

मैं एम्बेडेड संसाधनों को पकड़ने के लिए निम्न विधि का उपयोग करता हूं:

  protected static Stream GetResourceStream(string resourcePath) { Assembly assembly = Assembly.GetExecutingAssembly(); List<string> resourceNames = new List<string>(assembly.GetManifestResourceNames()); resourcePath = resourcePath.Replace(@"/", "."); resourcePath = resourceNames.FirstOrDefault(r => r.Contains(resourcePath)); if (resourcePath == null) throw new FileNotFoundException("Resource not found"); return assembly.GetManifestResourceStream(resourcePath); } 

मैं फिर इस परियोजना के पथ के साथ इसे कहते हैं:

 GetResourceStream(@"DirectoryPathInLibrary/Filename") 

संसाधन का नाम नाम स्थान से है और फ़ाइल के पथ के "छद्म" नाम स्थान है। "छद्म" नाम स्थान उप फ़ोल्ड स्ट्रक्चर के बजाय \ (बैकस्लैश) का उपयोग करके बनाया गया है। (डॉट्स)।

 public static Stream GetResourceFileStream(String nameSpace, String filePath) { String pseduoName = filePath.Replace('\\', '.'); Assembly assembly = Assembly.GetExecutingAssembly(); return assembly.GetManifestResourceStream(nameSpace + "." + pseduoName); } 

निम्नलिखित कॉल:

 GetResourceFileStream("my.namespace", "resources\\xml\\my.xml") 

नाम फ़ोल्डर में फ़ोल्डर-संरचना संसाधन \ xml में स्थित my.xml की धारा वापस कर देगा: my.namespace