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

C++ cli 写入文本文件并使内容立即可用(C+;+;/CLI),c++-cli,flush,C++ Cli,Flush,我正在使用Visual Studio 2008和.NET 3.5版编写一个C++/CLI程序 此程序从COM端口接收数据。如果收到的字符串不是特定格式,程序将向日志文件输出一条带有该行的错误消息 要求之一是计算机操作员可以进来检查日志文件 这是我的程序(有点): 执行Flush后,如果我检查日志文件的文件大小,它将保持不变。我也不能用记事本打开它 执行Close后,文件大小会发生变化,可以在记事本中打开 问题:为什么刷新后内容不可用?Flush是否应该立即“更新”文件?与中的Log()中的最后一

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

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

要求之一是计算机操作员可以进来检查日志文件

这是我的程序(有点):

执行
Flush
后,如果我检查日志文件的文件大小,它将保持不变。我也不能用记事本打开它

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

问题:为什么
刷新后内容不可用?
Flush
是否应该立即“更新”文件?与中的
Log()
中的最后一行一样

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


这里的简单解决方法是根本不使用它。但是使用构造函数代替。它也会选择默认值,但它使用FileShare::Read。你喜欢哪个。对于该类来说,这是一个更合理的安全选择,因为它写入文本流并自动刷新,不像文件流。

如果我没记错的话,当您在Windows中打开一个文件进行写入时,默认情况下它只锁定在您的进程中。
flush
调用将写入磁盘,但其他人仍无法读取该文件。直到你关闭这个文件。我不知道如何在C++CLI或.NET中以共享模式打开它。
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();   
 FileStream ^ fs = File::Create("erorr-log.txt");