Qt基础知识(2):文件和目录操作

        Qt 为文件和目录操作提供了一些类,利用这些类可以方便地实现一些操作。Qt 提供的与文件和目录操作相关的类主要包括以下几个:

  • QCoreApplication:用于提取应用程序路径、程序名等文件信息
  • QFile: 除了打开文件操作外,QFile 还有复制文件、删除文件等功能
  • QFileInfo:用于提取文件的信息,包括路径、文件名、后缀等。
  • QDir: 用于提取目录或文件信息,获取一个目录下的文件或目录列表,创建或删除目录和文件,文件重命名等操作。
  • QTemporaryDir和QTemporaryFile:用于创建临时目录和临时文件
  • QFileSystemWatcher: 文件和目录监听类,监听目录下文件的添加、删除等变化,监听文件修改变化。

这些类基本涵盖了文件操作需要的主要功能,有些功能还在某些类里重复出现,例如 QFile和 QDir 都具有删除文件、判断文件是否存在的功能。

1.文件操作

文件打开方式:

QIODevice::NotOpen

未打开

QIODevice::ReadOnly

以只读方式打开

QIODevice::WriteOnly

以只写方式打开

QIODevice::ReadWrite

以读写方式打开

QIODevice::Append

以追加的方式打开,新增加的内容将被追加到文件末尾

QIODevice::Truncate

以重写的方式打开,在写入新的数据时会将游标设置在文件开头

QIODevice::Text

在读取时,将行结束符转换成 \n;在写入时,将行结束符转换成本地格式,例如 Win32 平台上是 \r\n

QIODevice::Unbuffered

忽略缓存

(1)打开文件并执行读写操作

     //以可读可写的方式打开文件
     QFile file("1.txt");
     if(!file.open(QIODevice::ReadWrite | QIODevice::Text))
     {
         qDebug()<<"文件打开失败";
         return;
     }
    
     //读取文件内容
    QString str=file.readAll();
    qDebug()<<str;
    
    //向文件中写入内容
    file.write("123456789");
    
    //关闭文件
    file.close();

(2)获取文件的属性信息

    //查看文件属性
    QFileInfo info(file);
    qDebug()<<info.size();//查看文件大小
    qDebug()<<info.exists();//判断文件是否存在
    qDebug()<<info.isDir();//判断是否为目录
    qDebug()<<info.isFile();//判断是否为文件
    qDebug()<<info.isReadable();//判断是否可读
    qDebug()<<info.isWritable();//判断是否可写
    qDebug()<<info.isHidden();//判断隐藏属性
    qDebug()<<info.isExecutable();//判断可执行属性
    
    QDateTime create_time=info.created();//查看文件创建的时间
    QDateTime lastModified_time=info.lastModified();//查看文件最后修改的时间
    QDateTime lastRead_time=info.lastRead();//查看文件最后的访问时间

(3)文件对话框

    QString filter="文本文件(*.txt);;程序文件(*.jpg *.gif);;所有文件(*.*)";//文件过滤器
    
    //选择一个文件打开(必须是已经存在的文件)
    QString filename=QFileDialog::getOpenFileName(this,"操作提示","./",filter);
    qDebug()<<filename;

    //选择多个文件打开(必须是已经存在的文件)
    QStringList filenames=QFileDialog::getOpenFileNames(this,"操作提示","./",filter);
    qDebug()<<filenames.length();

    //选择一个文件保存(可以是已经存在的文件,也可以是不存在的文件)
    QString save_name=QFileDialog::getSaveFileName(this,"操作提示","./",filter);
    qDebug()<<save_name;

    //选择一个文件夹打开
    QString dir_name=QFileDialog::getExistingDirectory(this,"操作提示","./");
    qDebug()<<dir_name;
2.目录操作
    qDebug()<<QCoreApplication::applicationDirPath();//获取当前程序所在的目录
    qDebug()<<QCoreApplication::applicationFilePath();//获取当前程序的文件路径
    qDebug()<<QDir::currentPath();//获取当前工作目录
    qDebug()<<QDir::homePath();//获取家目录
    qDebug()<<QDir::rootPath();//获取根目录
    qDebug()<<QDir::tempPath();//获取临时文件目录(在程序中创建的临时目录和临时文件会放在这个路径下)
    
    qDebug()<<"系统字体目录路径:"<<QStandardPaths::standardLocations(QStandardPaths::FontsLocation);
    qDebug()<<"系统桌面目录路径:"<<QStandardPaths::standardLocations(QStandardPaths::DesktopLocation);
    qDebug()<<"用户文档目录路径:"<<QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);
    qDebug()<<"用户音乐目录路径:"<<QStandardPaths::standardLocations(QStandardPaths::MusicLocation);
    qDebug()<<"用户视频目录路径"<<QStandardPaths::standardLocations(QStandardPaths::MoviesLocation);
    qDebug()<<"用户图片目录路径:"<<QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
    qDebug()<<"系统临时文件目录路径:"<<QStandardPaths::standardLocations(QStandardPaths::TempLocation);
    qDebug()<<"系统缓存目录路径:"<<QStandardPaths::standardLocations(QStandardPaths::CacheLocation);
    qDebug()<<"系统下载目录路径:"<<QStandardPaths::standardLocations(QStandardPaths::DownloadLocation);
    qDebug()<<"系统家目录"<<QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
    
    //判断当前目录下是否存在一个目录“1”,如果不存在,则创建
    QDir dir;
    if(!dir.exists("1"))
    {
        dir.mkdir("1");
    }
    
    //判断./1/1/1/1/这个路径是否存在,如果不存在,则创建
    if(!dir.exists("1/1/1/1/"))
    {
        dir.mkpath("1/1/1/1/");
    }
3.临时文件操作
    //临时文件的使用(临时文件在函数结束时,或者执行close()之后,就会自动删除)
    QTemporaryFile file;
    if(!file.open())
    {
        qDebug()<<"临时文件创建失败";
        return;
    }
    qDebug()<<file.fileName();
    file.close();
4.临时目录操作
    //临时目录(在函数结束时,或者执行了remove()之后,临时目录会自动删除)
    QTemporaryDir dir;
    qDebug()<<dir.path();
    dir.remove();
5.其他

QDir::Dirs

列出与筛选器匹配的目录

QDir::AllDirs

列出与筛选器匹配的目录、列出所有目录;即不将过滤器应用于目录名

QDir::Files

列出文件

QDir::Drives

列出磁盘驱动器(在Unix下被忽略)

QDir::NoSymLinks

不要列出符号链接(被不支持符号链接的操作系统忽略)

QDir::NoDotAndDotDot

不要列出特殊条目“.”和“..”

QDir::NoDot

不要列出特殊条目“.”

QDir::NoDotDot

不要列出特殊条目“..”

QDir::AllEntries

列出目录、文件、驱动器和符号链接(除非指定System,否则不会列出损坏的符号链接)

QDir::Readable

列出应用程序具有读取权限的文件。Readable值需要与Dirs或Files组合使用

QDir::Writable

列出应用程序具有写访问权限的文件。“可写入”值需要与“目录”或“文件”组合使用

QDir::Executable

列出应用程序具有执行访问权限的文件。Executable值需要与Dirs或Files组合

QDir::Modified

仅列出已修改的文件(在Unix上被忽略)

QDir::Hidden

列出隐藏文件(在Unix上,以“.”开头的文件)

QDir::System

列出系统文件(在Unix上,包括FIFO、套接字和设备文件;在Windows上,包括.lnk文件)

QDir::CaseSensitive

过滤器应区分大小写

(1)遍历目录及其子目录下的文件和文件夹

QDirIterator是一个类,用于遍历目录及其子目录下的文件和文件夹。在下面这个例子中,我们创建了一个QDirIterator对象dir_it,指定了要遍历的目录为curr_path/record,并且设置了遍历的选项为Dirs(只遍历目录)和NoDotAndDotDot(不包括 “.” 和 “”)。同时,通过设置Subdirectories选项为true,可以递归地遍历所有子目录。

QDirIterator dir_it(QString("%1/record").arg(curr_path), QDir::Dirs|QDir::NoDotAndDotDot, QDirIterator::Subdirectories);

(2)遍历目录下的文件和文件夹

QDir dir = QDir(list.first());
dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
dir.setSorting(QDir::Time);
QFileInfoList file_list = dir.entryInfoList();

猜你喜欢

转载自blog.csdn.net/weixin_55238862/article/details/135374975