QT开发中文网

Linux C++ QT在U盘中判断文件是否存在,不存在则创建文件,并写入数据,U盘支持热插拔,当插入时再次检测该文件是否存在,存在则继续写数据,不存在则创建文件写数据

以下是一个示例代码,实现了在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盘已经挂载且文件已经存在时,定时器会直接打开文件以追加写入新数据。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=3473

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?