【QT】QT文件处理

2023-05-13 13:51:55 浏览数 (1)

文件处理

QFile类用于文件操作,它提供了读写文件的接口,可以读写文件、二进制文件和Qt资源文件。

处理文本文件和二进制文件,可以使用QTextStream类和QDataStream类。处理临时文件可以使用QTemporaryFile,获取信息可以使用QFileInfo,处理目录可以使用QDir,监视文件和目录变化可以使用QFileSystemWatcher。

QFile类示例

代码语言:javascript复制
#include <QCoreApplication>
#include<QFile>
#include<QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //文件读取
   QFile file("hello.txt");
   if(file.open(QIODevice::ReadOnly))
   {
       char buffer[100];
       qint32 n = file.readLine(buffer,sizeof(buffer));
       if(n != -1)
       {
            qDebug()<<n<<" "<<buffer;
            file.close();//关闭文件
       }
   }
   else
   {
        qDebug()<<file.errorString();
    }

   //文件写入
   QFile dataFile;
   double dPI = 3.1415926;
   int age =19;
   dataFile.setFileName("data.txt");
   if(dataFile.open(QFile::WriteOnly | QFile::Truncate))
   {
        QTextStream out(&dataFile);
        //设置精度
        out.setRealNumberPrecision(3);
        //设置字段宽度
        out.setFieldWidth(20);
         //设置对齐方式
         out.setFieldAlignment(QTextStream::AlignCenter);
        out<<QString("PI:")<<dPI;
        //将整数以二进制方式写入
        out<<bin<<age;
        //十六进制写入,并显示进制前缀
        out<<hex<<showbase<<age;
        //科学计数法
        out<<scientific<<dPI;
   }
    return a.exec();
}

操作二进制文件

代码语言:javascript复制
#include <QCoreApplication>
#include<QFile>
#include<QDebug>
#include<QDate>
#include<QDataStream>
int main(int argc, char *argv[])
{
    //往文件中写入数据
    QCoreApplication a(argc, argv);

     QFile  binFile("info.bat");
     if(binFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
     {
         QDataStream out(&binFile);
         out<<QString("半生瓜のblog")<<QDate::fromString("2022-01-24","yyyy-MM-dd")<<(qint32)19;
          binFile.close();
     }
     else
     {
         qDebug()<<binFile.errorString();
     }
     binFile.setFileName("info.bat");//指明要操作的文件
     if(binFile.open(QIODevice::ReadOnly))
     {
         QDataStream in(&binFile);
        //怎么写怎么读
         QString Name;
         QDate NowTime;
         qint32 Age;
         in>>Name>>NowTime>>Age;
         qDebug()<<Name<<NowTime<<Age;
         binFile.close();
     }
     else
     {
          qDebug()<<binFile.errorString();
     }

    return a.exec();
}

示例:获取文件信息

代码语言:javascript复制
void FileInfo::getFileInfo(QString &fileName)
{
    //通过这个类来获取文件的信息
    QFileInfo info(fileName);
    qint64 size = info.size();//获取文件大小
    QDateTime createTime = info.created();//获取文件创建时间
    QDateTime lastModTime = info.lastModified();//获取文件最后一次被的修改的时间
    QDateTime lasReadTime = info.lastRead();//获取文件最后一次被读取的时间
    //文件的属性信息
    bool isDir = info.isDir();//是不是目录
    bool isFile = info.isFile();//是不是文件
    bool isSymLink = info.isSymLink();//是不是链接
    bool isHid = info.isHidden();//是否隐藏
    bool isReadable = info.isReadable();//是否可读
    bool isWritable = info.isWritable();//是否可写
    bool isExcutable = info.isExecutable();//是否可执行

    //根据读取信息设置控件信息
    ui->FileSizeLineEdit->setText(QString::number(size));//整型转字符串
    ui->CreateTimeLineEdit->setText(createTime.toString());//QDate转字符串
    ui->LastModTimeLineEdit->setText(lastModTime.toString());
    ui->LastCheckTimeLineEdit->setText(lasReadTime.toString());
    ui->isDirCheckBox->setChecked(isDir);
    ui->isFileCheckBox->setChecked(isFile);
    ui->isExecutableCheckBox->setChecked(isExcutable);
    ui->isSymLinkCheckBox->setChecked(isSymLink);
    ui->isHiddenCheckBox->setChecked(isHid);
    ui->isWritableCheckBox->setChecked(isWritable);
    ui->isReadableCheckBox->setChecked(isReadable);

}

void FileInfo::on_browerFileBtn_clicked()
{
    //选择文件
    QString fileName = QFileDialog::getOpenFileName(this,"打开文件",".","files(*)");
     //选择目录QString path = QFileDialog::getExistingDirectory(this,"选择目录",".");
    ui->FileNameLineEdit->setText(fileName);//文件名(带路径的)
    getFileInfo(fileName);
}

0 人点赞