写入文本文件并立即使内容可用(C ++ / CLI)

时间:2014-07-24 09:46:34

标签: c++-cli flush

我正在使用Visual Studio 2008和.NET 3.5版编写C ++ / CLI程序。

该程序从COM端口接收数据。如果收到的字符串不是特定格式,程序将输出一行错误消息,并将该行添加到日志文件中。

其中一个要求是计算机操作员可以进入并检查日志文件。

这是我的程序(有点):

FileStream ^ fs = File::Create("erorr-log.txt");
StreamWriter ^ sw = gcnew StreamWriter(fs);

// while receiving data from COM port
// if data is not in expected format
sw->WriteLine("Error in received data");
sw->WriteLine(received_string_data_from_port);

sw->Flush();   
sw->Close();   

执行Flush后,如果检查日志文件的文件大小,则保持不变。我也无法在记事本中打开它。

执行Close后,文件大小会发生变化,可以在记事本中打开。

问题:为什么Flush之后内容 不可用 ?不应该Flush立即'更新'文件?如How to: Open and Append to a Log FileLog ()的最后一行?

1 个答案:

答案 0 :(得分:2)

 FileStream ^ fs = File::Create("erorr-log.txt");

File :: Create()是一种方便的方法,它选择了很多默认值来构造FileStream。您不喜欢的默认值,它使用FileShare :: None。这是一个非常安全的选择,没有人会看到部分写入的文件。但是在关闭之前阻止任何人访问该文件。

这里简单的解决方法是根本不使用它。但请改用StreamWriter(String)构造函数。这也选择默认值,但它使用FileShare :: Read。你喜欢哪个。与文件流不同,因为它写文本流并自动刷新,所以该类的安全选择更合理。