Я пишу немного приложения, посредством чего я хочу записать результаты операций в файл.
В основном то, что я хочу сделать, открыть поток для файла (я думаю 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#, это - только вещь хобби, поэтому если это - немой вопрос, мои извинения ;-)
Есть ли определенная причина, по которой вы должны держать файл открытым?
В этой ситуации я просто раз открываю файл каждый раз, используя 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 создаст файл, если оно не существует.
Justa, i think that you're overthinking this feature a bit. Причина, по которой вы видите примеры с конструкцией use, заключается в том, что использование{} с записью файлов достаточно быстро и безопасно.
Скорее всего, вы не открываете и не закрываете файл несколько раз в секунду, так что нет необходимости постоянно держать его открытым и, таким образом, рискуете покинуть приложение, не закрыв файл (что, впрочем, и исправляется PITA).
Еще один совет по программированию: не волнуйтесь об эффективности в самом начале. Заставьте ее работать сначала самым простым способом, а потом, только если это необходимо, улучшайте скорость/производительность.
В случае, если вы просто не будете использовать конструкцию use {}, вы можете использовать IDisposable интерфейс: http://msdn.microsoft.com/en-us/library/system.idisposable.dispose.aspx
public void Create(string path) { mStream = новый FileStream(путь); }
public void Dispose() { если (mStream != null) mStream.Dispose(); }
ReportFile ReportFile
будет иметь только переменную экземпляра TextWriter
- которая будет располагаться в вашем собственном методе Dispose()
.
Почему Вы хотите иметь явный метод Close()
, btw? В любом случае, Ваши вызывающие должны использовать , используя
, так зачем им также явно вызывать Close
?
Я бы предложил использовать конструкцию «Использование» и сохранить файл открыть только в то время как сохранение.
Идея может быть создать содержание в памяти, а затем сохранить его, когда вы будете готовы. Например, используя StringBuilder.