एक स्ट्रीम से एक 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.