Refactoring fopen_s
Refactoring fopen_s
本文关键字:fopen Refactoring 更新时间:2023-10-16
>我正在尝试重构一段非常旧的代码来生成日志文件:
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++的了解非常有限,所以我想知道是否有任何其他解释为什么生成的文件无法被另一个进程复制?
让我们看看文档
打开一个文件。这些是 fopen 的版本,_wfopen具有安全增强功能,如 CRT 中的安全增强功能中所述。
关注方式:链接
我们可以阅读:
文件系统安全性。默认情况下,安全文件 I/O API 支持安全文件访问。
因此,要解决此问题,您必须更改"文件安全性"以匹配"所有用户/读取访问权限"
相关文章:
- 试图创建流或fopen时程序崩溃
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- fopen 在 gdb 中返回 NULL
- fopen 在创建大量文件后因 EFBIG "File too large" 而失败
- fopen 与常量字符 * 从 QString 是不可能的
- 在C++中打开的带有"fopen"的mmap文件
- 无法使用 fopen() 加载文件
- 在我可以从fopen打开文件时,CopyFile无法找到该文件
- 使用 fopen() 的最佳方法是什么
- 使用MMAP与FSTREAM或FOPEN访问二进制文件
- 使用 fopen 而不是 Visual Studio 建议的 fopen_s 有什么错误
- 'fopen'返回格式错误的'fp'
- fopen 和 fwrite 从多个线程到同一个文件
- fopen 几分钟后无法打开文件
- 对"fopen"的期望
- header for fopen visual studio 2015 community edition
- 在UWP中获取fopen()的应用程序路径
- 为什么Fopen在Nexus5X Android设备(C )上失败
- 我如何确保Fopen()相对于可执行的目录打开一个文件,而不是我当前的目录
- 在地铁应用程序中使用fopen打开文件