第9章:QFile

1,QFile文件的各种操作方式、打开方式

2,源码:

#ifndef FILEVIEW_H
#define FILEVIEW_H

#include <QDialog>
#include <QObject>
#include <QFileInfoList>
#include <QLineEdit>
#include <QListWidget>
#include <QVBoxLayout>
#include <QDir>
#include <QListWidgetItem>
#include <QIcon>


class FileView : public QDialog
{
    Q_OBJECT

public:
    FileView(QWidget *parent=0, Qt::WindowFlags f=0);

    void showFileInfoList(QFileInfoList list);

public slots:
    void slotShow(QDir dir);
    void slotDirShow(QListWidgetItem *item);
private:
    QLineEdit    *fileLineEdit;
    QListWidget  *fileListWidget;
    QVBoxLayout  *mainLayout;

};

#endif // FILEVIEW_H
#include "fileview.h"

FileView::FileView(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f)
{
    fileLineEdit    = new QLineEdit(tr("/"));
    fileListWidget  = new QListWidget;

    mainLayout  = new QVBoxLayout(this);
    mainLayout->addWidget(fileLineEdit);
    mainLayout->addWidget(fileListWidget);

    connect(fileLineEdit, SIGNAL(returnPressed()), this, SLOT(slotShow(QDir)));
    connect(fileListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(slotDirShow(QListWidgetItem*)));

    QString root = "/";
    QDir rootDir(root);
    QStringList string;
    string << "*";
    QFileInfoList list = rootDir.entryInfoList(string);
    showFileInfoList(list);
}

//显示目录下的文件
void FileView::slotShow(QDir dir)
{
    QStringList string;
    string << "*";
    QFileInfoList list = dir.entryInfoList(string, QDir::AllEntries, QDir::DirsFirst); //按照某种过滤方式获得文件
    showFileInfoList(list);
}


//实现双击进入下一级目录,或者点击"..."返回上一级目录,顶部的编辑框显示当前所在的目录路径,列表中显示该目录下的所有文件
void FileView::showFileInfoList(QFileInfoList list)
{
    fileListWidget->clear();                                          //清空列表控件
    for (int i=0; i<list.count(); i++)                                //依次从QFileInfoList对象中取出所有项,按目录和文件两种方式加入列表控件中
    {
        QFileInfo tempFileInfo = list.at(i);
        if (tempFileInfo.isDir())
        {
            QIcon icon(":/image/dir.png");
            QString fileName     = tempFileInfo.fileName();
            QListWidgetItem *tmp = new QListWidgetItem(icon, fileName);
            fileListWidget->addItem(tmp);
        }
        else if (tempFileInfo.isFile())
        {
            QIcon icon(":/image/file.png");
            QString fileName     = tempFileInfo.fileName();
            QListWidgetItem *tmp = new QListWidgetItem(icon, fileName);
            fileListWidget->addItem(tmp);
        }
    }
}


//根据用户的选择显示下一级目录的所有文件
void FileView::slotDirShow(QListWidgetItem *item)
{
    QString str = item->text();                      //将下一级的目录名保存在str中
    QDir    dir;
    dir.setPath(fileLineEdit->text());               //设置QDir对象的路径为当年目录路径
    dir.cd(str);                                     //根据下一级目录名重新设置QDir对象的路径
    fileLineEdit->setText(dir.absolutePath());       //刷新显示当前的目录路径
    slotShow(dir);
}
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}



//常规打开文件方式
void MainWindow::on_QFile_clicked()
{
    QFile file;

    file.setFileName("Log.txt");

    if (file.open(QIODevice::ReadOnly))
    {
        QString str;

        str = file.readLine();
        ui->textEdit->setText(str);

        file.close();
    }
}

//Qtextstream打开方式
void MainWindow::on_QTextSteam_clicked()
{
    QFile file;
    file.setFileName("Log.txt");

    //Truncate表示将原来文件中的内容请,输出时将格式设置为左对齐,占10个字符位置
    if (file.open(QFile::WriteOnly | QFile::Truncate))
    {
        QTextStream out(&file);
        out << QObject::tr("score:") << qSetFieldWidth(10) << left << 90 <<endl;

        file.close();
    }
}


//bin文件
void MainWindow::on_Bin_clicked()
{
    QFile file("binary.data");
    file.open(QIODevice::WriteOnly | QIODevice::Truncate);
    QDataStream out(&file);                                //将数据序列化
    out << QString(tr("周何俊 "));
    out << QDate::fromString("1994/09/25", "yyyy/MM/dd");
    out << (qint32)19;
    file.close();

    file.setFileName("binary.data");
    if (!file.open(QIODevice::ReadOnly))
    {

    }
    else
    {
        QDataStream in(&file);
        QString     name;
        QDate       birthday;
        qint32      age;
        in >> name >> birthday >> age;

        ui->textEdit->clear();
        ui->textEdit->insertPlainText(name + "; ");
        ui->textEdit->insertPlainText(birthday.toString("yyyy/MM/dd") + "; ");
        ui->textEdit->insertPlainText(QString::number(age));

        file.close();
    }
}


//文件目录
void MainWindow::on_QDir_clicked()
{
    QDir dir(QDir::currentPath());

    ui->textEdit->clear();
    foreach (QFileInfo fileInfo, dir.entryInfoList(QDir::Files)) //QDir::Files设置过滤方式只显示文件
    {
        ui->textEdit->insertPlainText(QString("%1").arg(fileInfo.fileName(), -30)+ QString::number(fileInfo.size()) + "Byte\n");
    }
}


//文件系统
void MainWindow::on_FileSys_clicked()
{
    fileView.show();
}

//文件信息
void MainWindow::on_FileInfo_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("打开"), "/", "files(*)");
    QFileInfo info(fileName);

    ui->textEdit->clear();

    ui->textEdit->insertPlainText(QString("%1").arg(tr("Name:"), -20));
    ui->textEdit->insertPlainText(QString("%1").arg(fileName)+"\n");

    qint64 size = info.size();
    ui->textEdit->insertPlainText(QString("%1").arg(tr("Size:"), -20));
    ui->textEdit->insertPlainText(QString("%1").arg(size)+"Byte\n");

    QDateTime created = info.created();
    ui->textEdit->insertPlainText(QString("%1").arg(tr("CreatedTime:"), -20));
    ui->textEdit->insertPlainText(QString("%1").arg(created.toString())+"\n");

    QDateTime lastModified = info.lastModified();
    ui->textEdit->insertPlainText(QString("%1").arg(tr("LastModifiedTime:"), -20));
    ui->textEdit->insertPlainText(QString("%1").arg(lastModified.toString())+"\n");

    QDateTime lastRead = info.lastRead();
    ui->textEdit->insertPlainText(QString("%1").arg(tr("LastReadTime:"), -20));
    ui->textEdit->insertPlainText(QString("%1").arg(lastRead.toString())+"\n");

    bool isFile = info.isFile();
    ui->textEdit->insertPlainText(QString("%1").arg(tr("isFile:"), -20));
    (isFile) ? (ui->textEdit->insertPlainText("YES\n")) :(ui->textEdit->insertPlainText("NO\n"));

    bool isSymLink = info.isSymLink();
    ui->textEdit->insertPlainText(QString("%1").arg(tr("isSymLink:"), -20));
    (isSymLink) ? (ui->textEdit->insertPlainText("YES\n")) :(ui->textEdit->insertPlainText("NO\n"));

    bool isHidden = info.isHidden();
    ui->textEdit->insertPlainText(QString("%1").arg(tr("isHidden:"), -20));
    (isHidden) ? (ui->textEdit->insertPlainText("YES\n")) :(ui->textEdit->insertPlainText("NO\n"));

    bool isReadable = info.isReadable();
    ui->textEdit->insertPlainText(QString("%1").arg(tr("isReadable:"), -20));
    (isReadable) ? (ui->textEdit->insertPlainText("YES\n")) :(ui->textEdit->insertPlainText("NO\n"));

    bool isWritable = info.isWritable();
    ui->textEdit->insertPlainText(QString("%1").arg(tr("isWritable:"), -20));
    (isWritable) ? (ui->textEdit->insertPlainText("YES\n")) :(ui->textEdit->insertPlainText("NO\n"));

    bool isExecutable = info.isFile();
    ui->textEdit->insertPlainText(QString("%1").arg(tr("isExecutable:"), -20));
    (isExecutable) ? (ui->textEdit->insertPlainText("YES\n")) :(ui->textEdit->insertPlainText("NO\n"));
}

3,效果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ksmtnsv37297/article/details/86622177