我正在使用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 File中Log ()
的最后一行?
答案 0 :(得分:2)
FileStream ^ fs = File::Create("erorr-log.txt");
File :: Create()是一种方便的方法,它选择了很多默认值来构造FileStream。您不喜欢的默认值,它使用FileShare :: None。这是一个非常安全的选择,没有人会看到部分写入的文件。但是在关闭之前阻止任何人访问该文件。
这里简单的解决方法是根本不使用它。但请改用StreamWriter(String)构造函数。这也选择默认值,但它使用FileShare :: Read。你喜欢哪个。与文件流不同,因为它写文本流并自动刷新,所以该类的安全选择更合理。