QT中获取文件路径、文件名、后缀 (*)

目录

可获得文件的全名,包含全部的后缀。

====================

已验证的样例

void MainWindow::on_pushButton_clicked()
{
    QString file_full, file_name, file_path, file_suffix, complete_suffix, file_baseName, file_completeBaseName ;
    QFileInfo fileinfo; // <<------
    file_full =QFileDialog::getOpenFileName(this, "Open File", "QCoreApplication::applicationFilePath()",
                                            "AllFile (*.*);;");
    //-----------------------------
    fileinfo =QFileInfo(file_full);//file_full:包含路径的文件全名

    file_path = fileinfo.absolutePath(); //绝对路径

    file_name = fileinfo.fileName();//文件全名,包含全部后缀

    file_suffix = fileinfo.suffix(); //只含最后一个后缀
    complete_suffix = fileinfo.completeSuffix(); //连续多个的全部后缀

    file_baseName = fileinfo.baseName();
    file_completeBaseName = fileinfo.completeBaseName();

    //-----------------------------
    qDebug()<<"file_path : "<<file_path;

    qDebug()<<"file_name : "<<file_name;

    qDebug()<<"file_suffix : "<<file_suffix;
    qDebug()<<"complete_suffix : "<<complete_suffix;

    qDebug()<<"file_baseName : "<<file_baseName;
    qDebug()<<"file_completeBaseName : "<<file_completeBaseName;
}

输出:

file_path : "C:/Users/abcdef/Documents/zzzxxx"

file_name : "zz.abc.cde.fgh"

file_suffix : " fgh"  // fileinfo.suffix() : 只能获得最后一个后缀
complete_suffix : " abc.cde.fgh" // fileinfo.completeSuffix() : 可获得全部的后缀。

file_baseName : "zz"
file_completeBaseName : "zz.abc.cde"

完整的文件名的够成:

file_completeBaseName+ file_suffix

file_baseName + complete_suffix

可获得文件的全名,包含全部的后缀。

如:qDebug()的输出结果:

file_name : "zz.abc.cde.fgh"

参考: https://blog.csdn.net/zq9955/article/details/122401773

======================

QCoreApplication::application DirPath(); //获取项目的根路径
QCoreApplication::application FilePath();  //获取文件的根路径

    qDebug()<<"QCoreApplication::applicationDirPath() : "<<QCoreApplication::applicationDirPath();
    qDebug()<<"QCoreApplication::applicationFilePath(); : "<<QCoreApplication::applicationFilePath(); 

输出结果:

QCoreApplication::applicationDirPath() : "C:/Users/abcdef/Documents/build-untitled6-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/debug"  // 注意: win和 linux的Qt默认显示有差异;但并不影响真实路径构造的结果?

QCoreApplication::applicationFilePath(); : "C:/Users/abcdef/Documents/build-untitled6-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/debug/untitled6.exe"

======================

QString file_full, file_name, file_path,file_suffix ;
QFileInfo fileinfo;
file_full = QFileDialog::getOpenFileName(this,.....);
fileinfo =QFileInfo(file_full);//文件名
file_name = fileinfo.fileName();//文件后缀
file_suffix = fileinfo.suffix()//绝对路径
file_path = fileinfo.absolutePath();

https://www.jianshu.com/p/f7b2ae13bcca

QString runPath = QCoreApplication::applicationDirPath();//获取项目的根路径
QString file_name = QFileDialog::getOpenFileName(this,QStringLiteral("选择文件"),runPath,"Text Files(*.txt)",nullptr,QFileDialog::DontResolveSymlinks);

    static QString getOpenFileName(QWidget *parent = nullptr,
                                   const QString &caption = QString(),
                                   const QString &dir = QString(),
                                   const QString &filter = QString(),
                                   QString *selectedFilter = nullptr,
                                   Options options = Options());

第一个参数parent,用于指定父组件,可以看到QT默认这个参数是可以为空的,如果不想提供父控件,你可以直接写nullptr,但是我建议你写一个父控件,例如this即可。这样选择文件的弹框就可以在父控件中间显示。就像这样,弹框的中心和父控件中心是相同的

第二个参数caption,是对话框的标题,例如上图中的“选择文件”就是这么来的

第三个参数dir,是对话框显示时默认打开的目录,"“不写任何参数,那么会默认打开工程的目录,我一般会写”"或者提供项目的根目录;  “.”:打开当前目录?

第四个参数filter,是对话框的后缀名过滤器,如果不写,那么任何文件都会显示,如果写了会根据过滤器显示;

如果选择的文件是同一个类型,只是后缀不同,用空格隔开就好,例如都是图片,“Files(.jpg .png)”,代表只能选择后缀为jpg或者png的图片

如果选择的文件是不同类型,那么需要多个过滤器,过滤器之间用两个分号分隔,例如 "Image Files(.jpg);;Text Files(.png)";

第五个参数selectedFilter,是默认选择的过滤器,写nullptr就行,因为QT默认也是空,啥也没过滤;

第六个参数options,是对话框的一些参数设定,比如只显示文件夹等等,它的取值是enum QFileDialog::Option,每个选项可以使用 | 运算组合起来。

关于option参数,QT提供了很多种:

https://www.freesion.com/article/64581504018/

本博参考:https://blog.csdn.net/ken2232/article/details/129745712