Nhận TextReader từ Luồng?


81

Tôi đang cố đọc một tệp văn bản được nhúng System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);nhưng nó không cho tôi biết Stream. Tài nguyên được nhúng là một file văn bản như vậy, làm thế nào tôi có thể tắt chức năng này Streamthành một TextReader?

Câu trả lời:


183
TextReader tr = new StreamReader(stream);

1
Xin lưu ý rằng trong bài tập này, một bảng mã được sử dụng để chuyển đổi từ byte sang ký tự. Theo mặc định, mã hóa được phát hiện.
R. Schreurs

18

A StreamReaderlà một lớp con của TextReader, vì vậy bạn sẽ có thể làm:

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

5

Bạn có thể đọc tệp tài nguyên của mình như sau:

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

Một foreachvòng lặp tốt hơn một điều tra viên rõ ràng.
R. Martinho Fernandes

5

Bạn cần có một StreamReader từ nó (TextReader là một lớp cơ sở trừu tượng của StreamReader và StringReader). Cái gì đó như:

var stream = System.Reflection.Assembly.GetExecutingAssembly().
    GetManifestResourceStream(resource);
var reader = new StreamReader(stream);
var text = reader.ReadToEnd();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.