我正在尝试重构一段生成日志文件的旧代码:
FILE *File = NULL;
errno_t err = fopen_s(&File, m_pApp->LogFilename(), "a+"); // Open log file to append to
if (err == 0)
{
::fprintf(File, "Date,Time,Serial Number,ASIC Voltage,Ink Temp,Heater Temp, Heater Set Point, PSOC Version,");
if (m_ExtraLog)
::fprintf(File, "T1 Temperature,ASIC Temperature,Proc Temperature,Voltage mA");
::fprintf(File, "\n");
fclose(File);
}
重构的原因是有些用户报告说无法复制正在生成的文件(他们想要复制它以便可以通过labview程序进行分析)。我阅读了有关fopen_s的文档,并看到“由fopen_s和_wfopen_s打开的文件不可共享” - 这是我的问题的原因吗?我不确定,因为实际上,我没有看到复制问题,似乎能够毫无问题地复制和粘贴文件。在任何情况下,我都用推荐的_fsopen函数替换它,如下所示:
FILE *File = NULL;
if((File = _fsopen(m_pApp->LogFilename(),"a+", _SH_DENYNO))!= NULL)
{
::fprintf(File, "Date,Time,Serial Number,ASIC Voltage,Ink Temp,Heater Temp, Heater Set Point, PSOC Version,");
if(m_ExtraLog)
{
::fprintf(File, "T1 Temperature,ASIC Temperature,Proc Temperature,Voltage mA");
}
::fprintf(File, "\n");
fclose(File);
}
我已经为用户提供了重构代码,但他们仍然报告无法从labview复制或访问该文件。我对C ++的了解非常有限,所以我想知道为什么生成的文件无法被另一个进程复制的其他解释?