c#, Пишущий в файл, не используя использующий {}

Я пишу немного приложения, посредством чего я хочу записать результаты операций в файл.

В основном то, что я хочу сделать, открыть поток для файла (я думаю FileStream, но открыт для предложений), запишите данные в файл, затем закройте его позднее.

Таким образом, у меня есть класс под названием ReportFile с методами:

.Create( string path )

.WriteInfo( string a, string b, string c ) ; //Or something like this...

//Then sometime in the future

.Close()

Таким образом, класс с помощью класса ReportFile создаст экземпляр, звонить WriteInfo(..) многократно, пока это не закончено, делая независимо от того, что это должно сделать, затем звоните Close() в какой-то момент в будущем.

Теперь я знаю, что должен реализовать Расположить шаблон на классе ReportFile, чтобы гарантировать что, если что-нибудь идет screwey, что с дескриптором в файл соответственно имеют дело.

Однако я не смог найти что-либо к настоящему времени в межсети, показывающей, что хороший способ сохранить файл открывается и затем проверить, чтобы видеть, должно ли это быть закрыто, большинство примеров просто открывается, файл делают записи, затем закрывают его - все в a using{} создать.

В классе ReportFile я хочу смочь проверить, не закрывается ли экземпляр FileStream так, чтобы я мог закрыть его и свободный ресурс.

Кто-либо знает о хорошей ссылке на ссылку или совет?

(Ohh я должен упомянуть, что не делаю полного рабочего дня C#, это - только вещь хобби, поэтому если это - немой вопрос, мои извинения ;-)

5
задан Jon Seigel 7 January 2010 в 15:14
поделиться

6 ответов

Есть ли определенная причина, по которой вы должны держать файл открытым?

В этой ситуации я просто раз открываю файл каждый раз, используя FileMode.Append (или Pass Append = True для Streamwriter CTOR), а затем снова закрыть его впоследствии с помощью использования. Например:

void WriteInfo(string text)
{
    // Second parameter to StreamWriter ctor is append = true
    using(StreamWriter sw = new StreamWriter(logFilePath, true))
    {
         sw.WriteLine(text);
    }
}

Принимая этот подход, вам действительно не нужно нужен метод Create () или Close (). Append = True создаст файл, если оно не существует.

3
ответ дан 14 December 2019 в 04:39
поделиться

Justa, i think that you're overthinking this feature a bit. Причина, по которой вы видите примеры с конструкцией use, заключается в том, что использование{} с записью файлов достаточно быстро и безопасно.

Скорее всего, вы не открываете и не закрываете файл несколько раз в секунду, так что нет необходимости постоянно держать его открытым и, таким образом, рискуете покинуть приложение, не закрыв файл (что, впрочем, и исправляется PITA).

Еще один совет по программированию: не волнуйтесь об эффективности в самом начале. Заставьте ее работать сначала самым простым способом, а потом, только если это необходимо, улучшайте скорость/производительность.

1
ответ дан 14 December 2019 в 04:39
поделиться

В случае, если вы просто не будете использовать конструкцию use {}, вы можете использовать IDisposable интерфейс: http://msdn.microsoft.com/en-us/library/system.idisposable.dispose.aspx

0
ответ дан 14 December 2019 в 04:39
поделиться

public void Create(string path) { mStream = новый FileStream(путь); }

public void Dispose() { если (mStream != null) mStream.Dispose(); }

1
ответ дан 14 December 2019 в 04:39
поделиться

ReportFile ReportFile будет иметь только переменную экземпляра TextWriter - которая будет располагаться в вашем собственном методе Dispose().

Почему Вы хотите иметь явный метод Close(), btw? В любом случае, Ваши вызывающие должны использовать , используя , так зачем им также явно вызывать Close?

3
ответ дан 14 December 2019 в 04:39
поделиться

Я бы предложил использовать конструкцию «Использование» и сохранить файл открыть только в то время как сохранение.

Идея может быть создать содержание в памяти, а затем сохранить его, когда вы будете готовы. Например, используя StringBuilder.

0
ответ дан 14 December 2019 в 04:39
поделиться
Другие вопросы по тегам:

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