Filename与FileStream - 我应该用什么作为文件写入的参数?

时间:2015-04-09 14:10:52

标签: c# file filestream file-writing

我正在创建一个类来处理文件写入我们公司使用的自定义文件格式。

由于生成文件内容的数据采集工作流程由多个步骤组成(因此,数据记录的多个“突发”与可变持续时间暂停交替进行,以便用户可以在同一记录期间重新配置传感器会话),我想知道如何在整个过程中处理FileStream的打开和关闭。

我对以下选项有疑问:

====

// 1) WriterClass receives path as argument and handles FileStream internally
var writer = new WriterClass(filepath);
var datasource = new datasource();
writer.configure(configInfo);
writer.start();
writer.record();
// some time passes while data is received and saved
writer.pause();
writer.resumeRecording();
writer.stop();
writer.finish();

====

// 2) Client code handles FileStream itself, and passes it to WriterClass as argument

using (var stream = File.OpenWrite(filepath)
{
    var writer = new WriterClass(stream);
    var datasource = new datasource();
    writer.configure(configInfo);
    writer.start();
    writer.record();
    // some time passes while data is received and saved
    writer.pause();
    writer.resumeRecording();
    writer.stop();
    writer.finish();        
}

====

目前选项2对我来说似乎要容易得多,因为文件流保证在整个Writer生命周期中保持打开状态(顺便说一下,这对应用程序意图有意义),但有什么我应该考虑的?保持FileStream可能无限期开放是否有问题(由于pauseresumeRecording任意性质)?

另一方面,选项1留给WriterClass本身来处理流的打开和关闭,但我试图实现它并且它引发了许多看似不必要的复杂化,因为我必须处理流的打开和关闭几乎每种方法。最糟糕的是将有状态流表示为WriterClass的属性(我甚至没有尝试过)。

最后,如果应用程序在采集过程完成之前崩溃,那么使用部分写入的文件考虑会发生什么(文件损坏与文件可恢复性)将是健康的。

0 个答案:

没有答案