我的应用程序创建的Windows CE/Embedded C++非易失性文件在重新启动时被删除

Windows CE/Embedded C++ non-volatile files created by my app being deleted on reboot

本文关键字:文件 易失性 重新启动 删除 C++ 创建 应用程序 Windows CE Embedded 我的      更新时间:2023-10-16

我正在使用C++开发一个带有Windows Embedded Compact 7的应用程序。我最近遇到的问题是,我用应用程序创建的.ini设置文件和.txt日志文件在重新启动时被删除,并放在\Mounted Volume(一个非易失性分区)上。

该应用程序正在打开.ini文件,编辑值,保存文件,下次我启动时,它会显示我更新的设置。直到最近一次重大的软件更新后,我才开始出现问题。但在更新过程中,处理文件打开和关闭的具体功能没有被触及。

尽管这似乎与我的应用程序和我打开/编辑/保存/关闭文件的方式有关,因为如果我用写字板打开.ini文件并手动编辑值,然后保存它,则在重新启动时会保存设置。我还对所有功能进行了适当的错误处理,没有发生任何错误。

我在MSDN上读到可能需要"刷新"打开的缓冲区。可能我需要这么做?我真的希望有人已经处理过Windows嵌入式/CE,并且可能遇到过类似的问题,即非易失性文件分区更像易失性内存。

谢谢你的帮助!以下是我用来写入日志文件的代码,它与写入.ini文件的代码基本相同:

int writeLogFile(const char* szString)
{
FILE* pFile;
  if((pFile = fopen("\Mounted Volume\logFile.txt", "a+")) == NULL )
    debugMessage("Function: writeLogFile - Error! Could not open logFile.txtnr");
  else
    debugMessage("Function: writeLogFile - Notice. Opened logFile.txtnr");
  if(fprintf(pFile, "%sr",szString) < 0)
    debugMessage("Function: writeLogFile - Error! There was a problem writing the alarm string to logFile.txt.nr");
  if(fclose(pFile))
    debugMessage("Function: writeLogFile - Error! Could not close logFile.txtnr");
  else
    debugMessage("Function: writeLogFile - Notice. Closed logFile.txtnr");
  return 1;
}

在关闭文件之前,是否可以尝试ad一个fflush调用。这应该会强制进行实际写入。如果不明确强制,文件系统可能会缓存写操作。