qt QFile文件操作处理,QFileInfo文件信息读取的简单介绍

发布时间:2023年12月18日

QFile类用于文件操作,对文件进行读写操作,可读写文件,二进制文件和qt资源文件.处理文本文件和二进制文件可使用QTextStream类和QDataStream类,处理临时文件可以使用QTemporary,获取文件信息可以使用QFileInfo,处理目录可以使用QDir,监视文件和目录变化可以使用QFileSystemWatcher.

1.

QFile读取文件.

QIODevice::ReadOnly表示只读方式打开文件.readLine表示读取一行的字符串.失败返回-1,成功返回读取到的字节长度.

    //读取文件
    QFile  file("hello.txt");           //文件相对路径
    if(file.open(QIODevice::ReadOnly)){ //文件打开方式,只读
       
        char buffer[100]; 
        qint32 n;//本质是int类型,32位,4个字节.一个字节8个位
        //readLine()返回-1表示失败,成功则返回读取到的字节长度.
        //参数:readLine读取的数据保存位置,指定读的数据字节长度.
        n = file.readLine(buffer,sizeof(buffer));
        if(n != -1){
            qDebug()<<"长度:"<<n<<"内容:"<<buffer<<endl;
            file.close();
        }
    }else{
        qDebug()<<file.errorString();//打印文件打开失败原因
    }

2.

QFile写入文件.QTextStream操作文本文件

QFile::WriteOnly表示以写入文件方式打开文件,QFile::Truncate表示打开文件时对文件数据进行覆盖.

使用文件操作流QTextStream操作文本文件并对设置文件格式,其中setRealNumberPrecision(3)设置整数精度位数为3(即从左往右数有效数字为3个),setFieldWidth(10)设置字段宽度为10.

setFieldAlignment()函数用于设置对齐方式,它的枚举值有4个:

AlignLeft左对齐
AlignRight右对齐
AlignCenter居中对齐
AlignAccountingStyle左右两端对齐
    //写入文件
    double dPI = 3.1415926;
    int age =13;
    QFile dataFile;//QFile dataFile("data.txt");
    dataFile.setFileName("data.txt");//初始化/指定文件路径
    //与上面使用QIODevice不同的原因是:QFile继承自QIODevice
    if(dataFile.open(QFile::WriteOnly | QFile::Truncate)){//Truncate对文件数据进行覆盖

        qDebug()<<"文件打开成功"<<endl;

        QTextStream out(&dataFile);                     //文件操作流
        out.setRealNumberPrecision(3);                  //设置整数精度位数.效果同下
        out.setFieldWidth(10);                          //设置字段宽度
        out.setFieldAlignment(QTextStream::AlignRight); //设置对齐方式.右对齐


        out<<QString("PI:")<<qSetRealNumberPrecision(8) //设置整数精度位数
                           //<<qSetFieldWidth(10)         //设置字段宽度
                           //<<left                       //左对齐.
                           //<<dPI;                       //整数的精度位数,默认为6位
                           //<<bin            //设置读写整数为二进制
                           //<<hex            //设置读写整数为十六进制
                           //<<showbase       //显示进制前缀
                           //<<uppercasebase  //显示进制前缀大写

                           <<scientific      //科学计数法
                           <<dPI
                           <<age;
    }

3.

QTextStream流的操作符(可参考上面的代码)

操作符

作用描述

bin

设置读写的整数为 二进制数

oct

设置读写的整数为 八进制数

dec

设置读写的整数为十进制数

hex

设置读写的整数为十六进制数

showbase

强制显示进制前缀,如十六进制(0x)、八进制(0)、二进制(0b)

forcesign

强制显示符号(+、-)

forcepoint

强制显示小数点

noshowbase

强制不显示前缀

noforcesign

强制不显示符号

uppercasebase

显示大写的进制前缀

lowercasebase

显示小些的进制前缀

uppercasedigits

用大写字母表示

lowercasedigits

用小写字母表示

fixed

固定小数点表示

scientific

科学计数法表示

left

左对齐

right

右对齐

center

居中

endl

换行

flush

清除缓冲

?4.

QFileInfo类,可以获取文件信息.

包括文件大小size(),

文件创建时间created(),

文件最后一次修改时间lastModified(),

文件最后一次访问时间lastRead();

是否为目录isDir(),

是否为文件isFile(),

是否为连接isSymLink(),

是否隐藏文件isHidden()等等有非常多的关于文件信息的函数.

示例界面.

?代码:

使用QFileDialog::getOpenFileName()就可以打开一个模态文件对话框,对文件进行选择.选中文件,则返回一个文件名目录.

QFileDialog::getExistingDirectory()打开一个模态文件对话框,选中文件并返回一个文件目录.

    //跳出文件对话框...按钮
    void FileInfo::on_browseFileButton_clicked(){
    //弹出文件对话框.
    //fileName保存的是文件路径.获取打开的文件名,不太好测试目录
    //QString fileName = QFileDialog::getOpenFileName(this,       //指定父窗体,当前窗体对象作为父窗体
    //                                                "打开文件",  //对话框标题
    //                                                ".",        //文件打开路径(相对路径,当前路径作为默认路径)
    //                                                "files(*)"  //对文件进行过滤条件.所有文件
    //                                                );
    
    //把文件名刷新出来
    //ui->fileNameLineEdit->setText(fileName);
    //getFileInfo(fileName);
    
    
    //只显示目录不显示文件
    QString path = QFileDialog::getExistingDirectory(this,
                                                     "选择目录",
                                                     ".");
    ui->fileNameLineEdit->setText(path);
    getFileInfo(path);
}

    //获取文件信息 
    void FileInfo::getFileInfo(QString &fileName){

    //获取文件信息类(qt内部类)
    QFileInfo info(fileName);//文件路径

    qint64 size = info.size();                  //返回文件大小
    QDateTime createTime = info.created();      //返回文件创建日期
    QDateTime lastMTime = info.lastModified();  //返回最后一次修改时间
    QDateTime lastRTime = info.lastRead();      //返回最后一次访问时间

    //文件的属性信息7个
    bool bIsDir = info.isDir();             //是否为目录
    bool bIsFile = info.isFile();           //是否为文件
    bool bIsSymLink = info.isSymLink();     //文件是否为链接
    bool bIsHidden = info.isHidden();       //是否隐藏
    bool bIsReadable = info.isReadable();   //是否可读
    bool bIsWritable = info.isWritable();   //是否可写
    bool bIsExcutable = info.isExecutable();//是否为可执行文件

    //更新输入框
    ui->fileSizeLineEdit->setText(QString::number(size));//整数转为字符串
    ui->fileCreateLineEdit->setText(createTime.toString());//toString()日期转字符串
    ui->fileModifyLineEdit->setText(lastMTime.toString());
    ui->fileReadLineEdit->setText(lastRTime.toString());

    //多选按钮7个
    ui->isDirCheckBox->setChecked(bIsDir);      //判断设置是否勾选
    ui->isFileCheckBox->setChecked(bIsFile);
    ui->isSymLinkCheckBox->setChecked(bIsSymLink);
    ui->isHiddenCheckBox->setChecked(bIsHidden);
    ui->isWritableCheckBox->setChecked(bIsWritable);
    ui->isReadableCheckBox->setChecked(bIsReadable);
    ui->isExecutableCheckBox->setChecked(bIsExcutable);
}

all~~

文章来源:https://blog.csdn.net/qq_55359819/article/details/135060466
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。