ARM Embedded Linux (AM335x),断电后文本文件内容被删除
ARM Embedded Linux (AM335x), Text File Contents Deleted After Power Off
内核:3.12.30-AM335x-PD15.2.1(PHYTEC)
我的应用程序需要在 运行 时编辑一个文本文件,并在下次开机时使用它的内容。所以我创建了一个文本文件,其中我使用我用 QT C++ 编写的程序编写了一个简单的文本 "Disable" 或 "Enable"。
我意识到,程序写完简单的文本后,如果我在bash上使用命令"reboot",然后等待程序重新启动,然后再关闭系统(通过拔掉它的电缆),"cat TextFile.txt" 命令产生 "Enable" 或 "Disable",以程序最后正确写入的那个为准。
但是,如果我不重新启动并立即关闭系统电源,然后再次打开电源,文本文件仍然存在,但内容被删除,因此 "cat TextFile.txt" 没有任何结果。
我尝试使用以下方法手动执行相同操作:
方法一:
echo Disable > TextFile.txt
reboot
.....wait for it to reboot
cat TextFile.txt
The results is "Disable".
方法二:
echo Disable > TextFile.txt
.. power off by plugging off the cable
.. power on the system
cat TextFile.txt
No resulting text..
我只是不想为了保存文件而重启系统。所以我很乐意在我的 QT C++ 程序中执行命令来保存所有内容而无需重新启动;但是我不太了解操作系统,所以我不知道我应该怎么做才能做到这一点。
顺便说一句,这是我的代码:
QFile file(filename);
// Trying to open in WriteOnly and Text mode
if(!file.open(QFile::WriteOnly |
QFile::Text))
{
qDebug() << " Could not open file for writing";
}
// To write text, we use operator<<(),
// which is overloaded to take
// a QTextStream on the left
// and data types (including QString) on the right
QTextStream out(&file);
out << "Enable";
file.flush();
file.close();
正如您在 shell 上的实验表明这不是严格意义上的 C++ 或 Qt 问题,文件只是没有立即写入磁盘。
系统设置可能使用延迟写入来优化磁盘访问时间,即先写入内存缓冲区,然后每隔一段时间写入实际磁盘。
如果您有其他写入文件的程序并且预计断电是现实情况,您可能需要调整它。
现在,对于有问题的 Qt 程序,您可以尝试使用 QSaveFile
而不是 QFile
,它的 commit()
要求系统实际同步到磁盘。
内核:3.12.30-AM335x-PD15.2.1(PHYTEC)
我的应用程序需要在 运行 时编辑一个文本文件,并在下次开机时使用它的内容。所以我创建了一个文本文件,其中我使用我用 QT C++ 编写的程序编写了一个简单的文本 "Disable" 或 "Enable"。
我意识到,程序写完简单的文本后,如果我在bash上使用命令"reboot",然后等待程序重新启动,然后再关闭系统(通过拔掉它的电缆),"cat TextFile.txt" 命令产生 "Enable" 或 "Disable",以程序最后正确写入的那个为准。
但是,如果我不重新启动并立即关闭系统电源,然后再次打开电源,文本文件仍然存在,但内容被删除,因此 "cat TextFile.txt" 没有任何结果。
我尝试使用以下方法手动执行相同操作:
方法一:
echo Disable > TextFile.txt
reboot
.....wait for it to reboot
cat TextFile.txt
The results is "Disable".
方法二:
echo Disable > TextFile.txt
.. power off by plugging off the cable
.. power on the system
cat TextFile.txt
No resulting text..
我只是不想为了保存文件而重启系统。所以我很乐意在我的 QT C++ 程序中执行命令来保存所有内容而无需重新启动;但是我不太了解操作系统,所以我不知道我应该怎么做才能做到这一点。
顺便说一句,这是我的代码:
QFile file(filename);
// Trying to open in WriteOnly and Text mode
if(!file.open(QFile::WriteOnly |
QFile::Text))
{
qDebug() << " Could not open file for writing";
}
// To write text, we use operator<<(),
// which is overloaded to take
// a QTextStream on the left
// and data types (including QString) on the right
QTextStream out(&file);
out << "Enable";
file.flush();
file.close();
正如您在 shell 上的实验表明这不是严格意义上的 C++ 或 Qt 问题,文件只是没有立即写入磁盘。
系统设置可能使用延迟写入来优化磁盘访问时间,即先写入内存缓冲区,然后每隔一段时间写入实际磁盘。
如果您有其他写入文件的程序并且预计断电是现实情况,您可能需要调整它。
现在,对于有问题的 Qt 程序,您可以尝试使用 QSaveFile
而不是 QFile
,它的 commit()
要求系统实际同步到磁盘。