以下是一个示例代码,实现了在U盘中判断文件是否存在,不存在则创建文件,并写入数据。当插入U盘时再次检测该文件是否存在,存在则继续写数据,不存在则创建文件并写数据。
#include <QCoreApplication>
#include <QFile>
#include <QDebug>
#include <QDir>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString filePath = "/media/user/USB/test.txt"; // U盘中的文件路径
QFile file(filePath);
if(file.exists()) { // 文件已存在
qDebug() << "File already exists!";
if(file.open(QIODevice::WriteOnly | QIODevice::Append)) { // 打开文件以追加写入
QTextStream stream(&file);
stream << "\nThis is new data.";
qDebug() << "Data appended to file.";
}
else {
qDebug() << "Failed to open file for writing!";
}
}
else { // 文件不存在
QDir dir("/media/user/USB/");
if(!dir.exists()) { // 确保U盘挂载成功
qDebug() << "USB not mounted!";
return 1;
}
if(file.open(QIODevice::WriteOnly)) { // 创建新文件并打开以写入
QTextStream stream(&file);
stream << "This is some data.";
qDebug() << "New file created and data written.";
}
else {
qDebug() << "Failed to create new file!";
}
}
return a.exec();
}
需要注意的是,在Linux系统中,U盘一般会被挂载到/media/user/
下的某个目录中,具体目录名可能会根据U盘名称和系统配置不同而不同。因此,在程序中需要指定正确的文件路径。
另外,U盘支持热插拔,在程序运行期间U盘可能会被插入或拔出。为了确保程序能够正确地检测到文件的存在与否,可以在主循环中添加一个定时器,在一定时间间隔内不断检测文件是否存在。例如:
#include <QTimer>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString filePath = "/media/user/USB/test.txt"; // U盘中的文件路径
QTimer timer;
QObject::connect(&timer, &QTimer::timeout, [&]() {
QFile file(filePath);
if(file.exists()) { // 文件已存在
qDebug() << "File already exists!";
if(file.open(QIODevice::WriteOnly | QIODevice::Append)) { // 打开文件以追加写入
QTextStream stream(&file);
stream << "\nThis is new data.";
qDebug() << "Data appended to file.";
}
else {
qDebug() << "Failed to open file for writing!";
}
}
else { // 文件不存在
QDir dir("/media/user/USB/");
if(!dir.exists()) { // 确保U盘挂载成功
qDebug() << "USB not mounted!";
return;
}
if(file.open(QIODevice::WriteOnly)) { // 创建新文件并打开以写入
QTextStream stream(&file);
stream << "This is some data.";
qDebug() << "New file created and data written.";
}
else {
qDebug() << "Failed to create new file!";
}
}
});
timer.start(1000); // 每隔1秒检测一次文件是否存在
return a.exec();
}
这样,当U盘被插入时,定时器会在一定时间内不断检测文件是否存在,并在发现文件不存在时创建新文件并写入数据;当U盘已经挂载且文件已经存在时,定时器会直接打开文件以追加写入新数据。