Будет закрытие FileStream закрывать StreamReader?

Он разделяет Модель и Представление, управляемые Контроллером. Что касается Модели, Ваши Модели должны следовать ОО-архитектуре, будущие усовершенствования и другое обслуживание базы кода должны быть очень простыми, а база кода должна использоваться повторно.

Одна и та же модель может иметь любые виды, например, нет) Одна и та же информация может отображаться в виде различных графических представлений. Один и тот же вид может иметь разные номера моделей, например, разные детали могут быть показаны в виде одного графика, скажем, в виде гистограммы. Это то, что можно использовать как в View, так и в Model.

Улучшения в представлениях и другая поддержка новых технологий для построения представления могут быть легко реализованы.

Парню, который работает над дозой представления, не нужно знать о базовой базе кода Модели и ее архитектуре, наоборот, для модели.

8
задан norlando 24 November 2009 в 19:00
поделиться

5 ответов

По сути, да. На самом деле вам не нужно закрывать StreamReader. Если вы это сделаете, все, что он сделает, это закроет базовый поток.

@Bruno хорошо замечает закрытие самой внешней оболочки. Рекомендуется закрыть самый внешний поток и позволить ему закрыть базовые потоки, чтобы гарантировать, что все ресурсы высвобождаются должным образом.

From Reflector ...

public class StreamReader : TextReader
{
    public override void Close()
    {
        this.Dispose(true);
    }

    protected override void Dispose(bool disposing)
    {
        try
        {
            if ((this.Closable && disposing) && (this.stream != null))
            {
                this.stream.Close();
            }
        }
        finally
        {
            if (this.Closable && (this.stream != null))
            {
                this.stream = null;
                this.encoding = null;
                this.decoder = null;
                this.byteBuffer = null;
                this.charBuffer = null;
                this.charPos = 0;
                this.charLen = 0;
                base.Dispose(disposing);
            }
        }
    }
}
7
ответ дан 5 December 2019 в 07:58
поделиться

Нет. Вместо этого вам следует закрыть ридер . На практике это может не представлять никаких проблем, но StreamReader может добавить некоторые накладные расходы, которые, возможно, потребуется очистить. Поэтому вам всегда следует закрывать самую верхнюю оболочку.

6
ответ дан 5 December 2019 в 07:58
поделиться

Вы также можете просто использовать метод File.ReadAllText:

txtFile.Text = File.ReadAllText(@"c:\file.txt");
6
ответ дан 5 December 2019 в 07:58
поделиться

Вам не нужно закрывать StreamReader, потому что он не владеет никакими неуправляемыми ресурсами. Достаточно закрыть FileStream. Вы можете переписать свой код, используя , используя следующим образом:

public void ReadFile()
{
    using (var file = new FileStream("c:\file.txt", FileMode.Open, FileAccess.Read))
    {
        txtFile.Text = new StreamReader(file).ReadToEnd();
    }
}

В общем, если вы сомневаетесь, лучше перестраховаться и утилизировать все объекты IDisposable, когда вы закончили их использовать.

public void ReadFile()
{
    using (FileStream file = new FileStream("c:\file.txt", FileMode.Open, FileAccess.Read))
    {
        using (StreamReader streamReader = new StreamReader(file))
        {
            txtFile.Text = streamReader.ReadToEnd();
        }
    }
}
2
ответ дан 5 December 2019 в 07:58
поделиться

Нет.

0
ответ дан 5 December 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: