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