एक स्ट्रीम से एक TextReader प्राप्त करें?


81

मैं एक एम्बेडेड पाठ फ़ाइल पढ़ने की कोशिश कर रहा हूं, System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);लेकिन यह मुझे देता है Stream। एम्बेडेड संसाधन एक पाठ फ़ाइल है, इसलिए मैं इसे Streamएक में कैसे बदल सकता हूं TextReader?

जवाबों:


183
TextReader tr = new StreamReader(stream);

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

18

A StreamReaderएक उपवर्ग है TextReader, जिससे आप कर पाएंगे:

using(var stream = System.Reflection.Assembly.GetExecutingAssembly().
    GetManifestResourceStream(resource))
using(var reader = new StreamReader(stream))
{
    // Use reader.
}

5

आप अपनी संसाधन फ़ाइल को इस तरह पढ़ सकते हैं:

Assembly resourceAssembly = Assembly.LoadFrom(resourceFile.FullName);
string[] manifests = resourceAssembly.GetManifestResourceNames();

using (ResourceReader reader = new ResourceReader(
    resourceAssembly.GetManifestResourceStream(manifests[0])))
{
    foreach (IDictionaryEnumerator dict in reader)
    {
        string key = dict.Key as string;
        object val = dict.Value;
    }
}

एक foreachपाश एक स्पष्ट प्रगणक से बेहतर है।
आर। मार्टिनो फर्नांडीस

5

आपको इससे एक StreamReader प्राप्त करने की आवश्यकता है (TextReader StreamReader और StringReader का एक सार आधार वर्ग है)। कुछ इस तरह:

var stream = System.Reflection.Assembly.GetExecutingAssembly().
    GetManifestResourceStream(resource);
var reader = new StreamReader(stream);
var text = reader.ReadToEnd();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.