90

I'm trying to read an embedded text file with System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resource); but it gives me a Stream. The embedded resource is a text file so, how can I turn this Stream into a TextReader?

Teo Klestrup Röijezon
  • 5,097
  • 3
  • 29
  • 37
Juan
  • 15,274
  • 23
  • 105
  • 187

4 Answers4

201
TextReader tr = new StreamReader(stream);
Teo Klestrup Röijezon
  • 5,097
  • 3
  • 29
  • 37
  • 2
    Please note that in this assignment, an encoding is used to convert from bytes to characters. By default, the encoding is detected. – R. Schreurs Oct 11 '18 at 10:37
19

A StreamReader is a subclass of TextReader, so you will be able to do:

using(var stream = System.Reflection.Assembly.GetExecutingAssembly().
    GetManifestResourceStream(resource))
using(var reader = new StreamReader(stream))
{
    // Use reader.
}
casperOne
  • 73,706
  • 19
  • 184
  • 253
driis
  • 161,458
  • 45
  • 265
  • 341
5

You can read your resource file like this :

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;
    }
}
casperOne
  • 73,706
  • 19
  • 184
  • 253
Arnaud F.
  • 8,252
  • 11
  • 53
  • 102
5

You need to get a StreamReader from it (TextReader is an abstract base class of StreamReader and StringReader). Something like:

var stream = System.Reflection.Assembly.GetExecutingAssembly().
    GetManifestResourceStream(resource);
var reader = new StreamReader(stream);
var text = reader.ReadToEnd();
casperOne
  • 73,706
  • 19
  • 184
  • 253
Paul Kearney - pk
  • 5,435
  • 26
  • 28