最近用qt操作文件或者目录的动作比较多,简单整理一下常用的接口,方便回顾。
总的来说,其实就是用文件选择对话框QFileDialog类,以及操作文件信息的QFileInfo类,以及相关QCoreApplication中静态成员函数获取一些信息,qDir类。
1:获取当前目录,一般默认也是当前目录。
void Dialog::on_pbn_getcurdir_clicked()
{
QString cur_string = QApplication::applicationDirPath(); //可执行文件的目录路径
QString cur_string1 = QApplication::applicationFilePath(); //可执行文件的路径
QString cur_dir = QDir::currentPath(); //获取当前工作目录路径 其他获取主目录,临时目录,磁盘列表,求绝对路径
ui->le_display->append("cur_string:"+cur_string);
ui->le_display->append("cur_string1:"+cur_string1);
ui->le_display->append("cur_dir:"+cur_dir);
}
2:可以设置一个目录,下次打开默认基于该目录。
或者保存最后一次用户打开的目录,做使用。
//在打开文件或者目录时 一般可以设置默认打开的目录 这里要借助全局或者成员变量
static QString default_dir = QDir::currentPath();
void Dialog::on_pbn_setdefdir_clicked()
{
//打开一个目录 父对象指针 标题栏 初始目录
//DontResolveSymlinks:不解析符号链接,而是直接显示链接的路径。
//ShowDirsOnly:仅显示目录,过滤掉文件。
//ReadOnly:只读模式,在对话框中禁止创建新目录。
default_dir = QFileDialog::getExistingDirectory(this, "选择默认目录",default_dir, QFileDialog::ShowDirsOnly);
ui->le_display->append("设置默认打开目录为:"+default_dir+",需要存储信息,后面再次使用。");
}
3:选择文件和目录,基于上面设置的默认目录。
void Dialog::on_pbn_file_clicked()
{
//打开一个文件,借助QFileDialog,目录可以用上面设置的,方便操作
//父对象 标题栏 初始目录 过滤文件类型
m_file_name = QFileDialog::getOpenFileName(this, "选择一个文件", default_dir, "Text Files (*.txt);;All Files (*)");
ui->le_file_name->setText(m_file_name);
ui->le_display->append("选择一个文件:"+m_file_name);
}
void Dialog::on_pbn_dir_clicked()
{
m_dir_name = QFileDialog::getExistingDirectory(this, "选择一个目录",default_dir, QFileDialog::ShowDirsOnly);
ui->le_dir_name->setText(m_dir_name);
ui->le_display->append("选择一个目录:"+m_dir_name);
}
4:选择一个文件后获取是字符串,获取文件路径目录。
//这里主要借助QFileInfo 类和qDir类
void Dialog::on_pbn_getfile_dir_clicked() //获取已经选择文件的路径
{
QFileInfo fileinfo(m_file_name); //也可以是一个目录
QString reall_filedir = fileinfo.dir().absolutePath(); //获取绝对路径
QString reall_filename = fileinfo.fileName();
ui->le_display->append("选择文件的目录为:" + reall_filedir);
}
5:选择一个文件后,获取真实文件名等其他方法
#include <QDateTime>
void Dialog::on_pbn_getfile_name_clicked() //获取已经选择文件的实际文件名
{
QFileInfo fileinfo(m_file_name); //相关文件的操作都是借助于QFileInfo 可以探索其他
QString reall_filename = fileinfo.fileName();
ui->le_display->append("选择文件的文件名为:" + reall_filename);
ui->le_display->append("选择文件的路径为:"+fileinfo.filePath());
ui->le_display->append("选择文件的绝对路径为:"+fileinfo.absoluteFilePath());
ui->le_display->append("选择文件的最后修改时间:"+fileinfo.lastModified().toString());
}
6:要生成目标文件,基于选择的文件,做文件名处理。
这里文件的拷贝,重命名等都只是接口
void Dialog::on_pbn_file_add_suffix_clicked()
{
QFileInfo fileinfo(m_file_name);
//需要对目录进行处理 比如要生成一个目标文件在源文件基础上加个后缀
QString dst_filename = fileinfo.dir().absolutePath()+"/"+fileinfo.baseName()+"_后缀"+"."+fileinfo.suffix();
ui->le_display->append("处理后目标文件为:"+dst_filename);
//如果要遍历一个目录 可以用QDir类 entryList
}