.NET असेंबली में टेक्स्ट फ़ाइल कैसे एम्बेड करें?


118

मैं एक असेंबली में एक पाठ फ़ाइल को एम्बेड करना चाहूंगा ताकि मैं इसे डिस्क से पढ़ने के बिना पाठ को लोड कर सकूं, और इसलिए कि मुझे जो कुछ भी चाहिए वह सब exe के भीतर निहित है। (ताकि यह अधिक पोर्टेबल हो)

क्या इसे करने का कोई तरीका है? मैं संसाधन फ़ाइलों के साथ कुछ मान?

और यदि आप कर सकते हैं, तो आप इसे कैसे करते हैं और प्रोग्राम को एक स्ट्रिंग में कैसे लोड करते हैं?

जवाबों:


147

प्रोजेक्ट फ़ाइल पर राइट-क्लिक करें, गुण चुनें।

खुलने वाली विंडो में, संसाधन टैब पर जाएं, और यदि टैब-पृष्ठ के बीच में इसका नीला लिंक है, तो नया संसाधन बनाने के लिए इसे क्लिक करें।

यहां छवि विवरण दर्ज करें

फिर टैब-पेज के ऊपर टूलबार से, एक नई टेक्स्ट फ़ाइल जोड़ने का चयन करें, इसे एक नाम दें, इसे आपकी परियोजना में जोड़ा जाएगा और इसे खोला जाएगा।

यदि आप इसे प्राप्त करते हैं, तो अपने कोड में आप Resources.TheNameYouGaveTheTextFileHere टाइप कर सकते हैं और आप इसकी सामग्री तक पहुँच सकते हैं। ध्यान दें कि जब आप पहली बार क्लास में रिसोर्स क्लास का उपयोग करते हैं, तो आपको एक यूजिंग डायरेक्टिव (Ctrl + हिट करें) टाइप करने के बाद रिसोर्स प्राप्त करने के लिए मेनू प्राप्त करने के लिए VS को आपके लिए करने के लिए टाइप करना होगा)।

यदि उपरोक्त विवरण के बारे में कुछ स्पष्ट नहीं था, तो कृपया एक टिप्पणी छोड़ दें और मैं इसे तब तक संपादित करूंगा जब तक कि यह पूर्ण न हो या समझ में न आए :)


1
निर्देशन कोड 'उपयोग' कैसा दिखेगा, मैं यह काम करने के लिए संघर्ष कर रहा हूं। मैंने Solutions.txt को एक संसाधन के रूप में जोड़ा है, लेकिन इसे Resources.solutions नहीं मिल रहा है - मुझे लगता है कि मैं निर्देश का उपयोग कर रहा हूं।
१२:०६ पर स्पेज करें

3
आह-आह, मुझे जो कुछ भी करने की ज़रूरत थी वह एक ए जोड़ था। सामने (यानी My.Resource.solutions) के सिंपल!
स्पेज करें

2
एक संसाधन जोड़ना और उत्पन्न करना शामिल Properties\Resources.Designer.csहै namespace YourProjectRootNamespace.Properties, इसलिए आपको इसका उपयोग करना होगा YourProjectRootNamespace.PropertiesProjectRootNamespaceVisualStudio में आपकी परियोजना के गुणों में परिभाषित है।
इलियागपेट्रोव

1
यदि मैं इस तरीके से एक पाठ फ़ाइल जोड़ता हूं, और कहता हूं कि पाठ फ़ाइल मेरे समाधान का हिस्सा है ... अगर वह फ़ाइल अपडेट हो जाती है और मैं असेंबली का पुनर्निर्माण करता हूं तो एम्बेडेड संसाधन भी अपडेट हो जाएगा? या क्या मुझे कभी फ़ाइल बदलने / फिर से जोड़ने की आवश्यकता होगी?
पीटर तिरेल

3
फ़ाइलें संकलित समय में संसाधनों में पैक की जाती हैं, न कि जब आप उन्हें जोड़ते हैं। आप अपनी पसंद के किसी भी टूल में फ़ाइल को स्वतंत्र रूप से बदल सकते हैं और पुनर्निर्माण कर सकते हैं, परिवर्तन आपके असेंबली का हिस्सा होगा।
लास वी। कार्लसन जू

38

विज़ुअल स्टूडियो 2003, विज़ुअल स्टूडियो 2005 और संभवतः पहले के संस्करणों में (यह 2008 में भी काम करता है) आप अपनी परियोजना में पाठ फ़ाइल को शामिल कर सकते हैं, फिर 'प्रॉपर्टीज़' पैनल में, एक्शन को 'एंबेडेड रिसोर्स' पर सेट करें। तब आप फ़ाइल को एक स्ट्रीम के रूप में उपयोग कर सकते हैं Assembly.GetManifestResourceStream(string)

यहां अन्य उत्तर अधिक सुविधाजनक हैं। मैं इसे पूर्णता के लिए शामिल करता हूं।

ध्यान दें कि यह दृष्टिकोण अन्य प्रकार की फ़ाइलों जैसे कि चित्र, आइकन, ध्वनि, आदि को एम्बेड करने के लिए काम करेगा ...


8
नोट: GetManifestResourceStream (), जैसे "MyNamespace.MyTextfile.txt" के लिए पैरामीटर के रूप में नाम स्थान और फ़ाइल नाम का उपयोग करें। सभी नामों की सूची प्राप्त करने के लिए आप GetManifestResourceNames () को भी कॉल कर सकते हैं।
स्टिफ़ेल

32

किसी टेक्स्ट फ़ाइल को एम्बेड करने के बाद, उस फ़ाइल को किसी भी तरह से कोड में उपयोग करें ...

global::packageName.Properties.Resources.ThatFileName

3
यह एक बेहतर तरीका है क्योंकि यह संकलक त्रुटि को फेंक देगा यदि संसाधन हटा दिया जाता है। यह टाइपो को भी खत्म करता है। पोस्ट के लिए धन्यवाद।
बेन ग्रिप्का

5। क्या मैं इसे C # DLL स्तर की फ़ाइल में वापस लिख सकता हूँ?
प्रज्वल भट

1
यदि मैं ThatFileNameएक चर से निर्दिष्ट करना चाहता हूं तो क्या होगा ?
c00000fd

4

हाँ, आप सही हैं - एक संसाधन फ़ाइल बनाएँ। जब आप ऐसा करते हैं कि आपको स्ट्रिंग को "लोड" करने की आवश्यकता नहीं है, तो इसे संसाधन के रूप में संदर्भित किया जाएगा।


2

यहाँ मेरे लिए क्या काम किया है। (मुझे एक निष्पादन योग्य .NET छवि फ़ाइल में एम्बेडेड फ़ाइल की सामग्री को पढ़ने की आवश्यकता है।)

कुछ भी करने से पहले, अपनी फ़ाइल को विज़ुअल स्टूडियो में अपने समाधान में शामिल करें। (मेरे मामले में वीएस 2017 कम्युनिटी।) मैंने Solution Explorerराइट-क्लिक किए गए Propertiesफ़ोल्डर पर स्विच किया , Add Existing Itemफ़ाइल को चुना और चुना। (कहो FileName.txt।) तब भी जब में Solution Explorer, शामिल फ़ाइल पर राइट-क्लिक करें, का चयन करें Properties, और के रूप Build Actionमें चुनें Embedded Resource

फिर इस कोड का उपयोग इसकी बाइट्स को पढ़ने के लिए करें:

string strResourceName = "FileName.txt";

Assembly asm = Assembly.GetExecutingAssembly();
using( Stream rsrcStream = asm.GetManifestResourceStream(asm.GetName().Name + ".Properties." + strResourceName))
{
    using (StreamReader sRdr = new StreamReader(rsrcStream))
    {
        //For instance, gets it as text
        string strTxt = sRdr.ReadToEnd();
    }
}

ध्यान दें, इस मामले में आपको उस फ़ाइल को एक संसाधन के रूप में जोड़ने की आवश्यकता नहीं है जैसा कि स्वीकृत उत्तर में प्रस्तावित किया गया था ।


1

मैंने जो किया था यह रहा:

  1. प्रोजेक्ट पर राइट क्लिक करके विजुअल स्टूडियो में मेरी फाइलें (संसाधन) जोड़े।
  2. आपके द्वारा जोड़ी गई प्रत्येक फ़ाइल पर राइट क्लिक करें और एंबेडेड संसाधन के लिए "बिल्ड प्रकार" बदलें।
  3. संसाधन तक पहुँचने के लिए:

    ए। फ़ंक्शन का उपयोग करके वर्तमान असेंबली प्राप्त करें:GetExecutingAssembly()

    ख। मेरे द्वारा जोड़ा गया संसाधन एक पाठ फ़ाइल थी इसलिए मैंने इसका उपयोग करके एक स्ट्रीम में पढ़ा GetManifestResourceStream(fileName)। जिस तरह से मैंने फ़ाइल नामों को एक्सेस किया है वह कॉल करके हैGetManifestResourceNames()

    सी। अब StreamReader()एक चर में फ़ाइल के अंत में पढ़ने के लिए एक वर्ग का उपयोग करें यदि वह है जो आप चाहते हैं।


0

वर्तमान विधानसभा (सामान्य अनुभाग में) प्राप्त करने के लिए , पावन के जवाब में जोड़ना :

Assembly _assembly;

GetManifestResourceStream (फ़ाइल नाम) (कोड में, जहाँ संसाधन से रीड की आवश्यकता है):

try
{
    _assembly = Assembly.GetExecutingAssembly();
    _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("*Namespace*.*FileName*.txt"));
}
catch
{
    Console.WritelLine("Error accessing resource!");
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.