Pobrać TextReader ze strumienia?


81

Próbuję odczytać osadzony plik tekstowy za pomocą, System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);ale daje mi Stream. Osadzony zasób to plik tekstowy, więc jak mogę go zamienić Streamna plik TextReader?

Odpowiedzi:


183
TextReader tr = new StreamReader(stream);

1
Należy pamiętać, że w tym przypisaniu do konwersji z bajtów na znaki używane jest kodowanie. Domyślnie kodowanie jest wykrywane.
R. Schreurs,

18

A StreamReaderjest podklasą TextReader, więc będziesz mógł:

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

5

Możesz przeczytać swój plik zasobów w ten sposób:

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;
    }
}

foreachPętla jest lepsza niż wyraźnego wyliczający.
R. Martinho Fernandes

5

Musisz pobrać z niego StreamReader (TextReader jest abstrakcyjną klasą bazową StreamReader i StringReader). Coś jak:

var stream = System.Reflection.Assembly.GetExecutingAssembly().
    GetManifestResourceStream(resource);
var reader = new StreamReader(stream);
var text = reader.ReadToEnd();
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.