Qt5 实现文件复制并在指定路径下创建文件夹
最近在基于qt5平台的应用界面上想实现本地选择文件,并把文件拷贝到指定路径下。找到以下这篇文章参考,参考其中几个函数的写法实现了想要的功能,故记录一下,方便以后查找参考。
我在头文件中定义几个变量:
QFileDialog *mFileDlg;
QString mFileName;
QLineEdit *mFilePath;
在.cpp实现文件中代码如下:
mFilePath = new QLineEdit(this);
mFileName = QFileDialog::getOpenFileName(this,tr("Open File"));
mFilePath->setText(mFileName);
HelperPrintf("current file name is: %s",mFileName);
QFile file(mFileName);
QFileInfo info(mFileName);
QString dstPath = QString(DST_FILE_PATH) + QString("/");
QDir directory ;
directory.cd(dstPath);
dstPath += info.fileName();
file.copy(dstPath);
file.close();
QFile checkPath(dstPath);
if(checkPath.open(QFile::ReadOnly))
{
QMessageBox msgBox;
msgBox.setText("File copy success!");
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
}
checkPath.close();
博客原文如下:
最近想做一个局域网的图书管理的一个应用,希望能够管理本地的电子书资源,同时分享给在同一个局域网的用户们。因此在本地需要建立一个图书的管理目录出来(暂时是这样想的),因此需要对电脑上的资源进行统一的移动和复制,同时将可能以后需要的信息进行保存下来,在Qt中可能设计到相关内容的包含:
- QFile 的使用
- QDir 的使用
- QFileInfo的使用
- QFileDialog的使用
QFile类提供了读取文件和操作文件的接口,可以读写文本文件以及二进制文件,以及资源文件。通常常用的函数包含open()和close()函数的使用。
QDir类使得可以访问目录结构以及目录下的文件信息。可以操作路径名、访问路径以及文件的相关信息。可以通过mkdir()创建目录以及重命名目录。
QFileInfo类可以提供与操作系统无关的文件信息,包含文件的名称和文件系统的位置,文件的访问权限以及是否是一个目录。可以通过函数path()和fileName()获取文件的路径和文件名,同时baseName()可以获得文件的基本名称,即不包含后缀名。
下面一个简单的实例,可以通过选择需要复制的文件,复制到相应的目录下。同时根据文件名,在相应的目录下创建对应文件的子目录。实现的是,在一个界面进行文件的操作,包括录入图书的信息,包括书名,作者以及出版商,以及书的封面,然后保存。
头文件内容为:
- #ifndef UPLOADFRAME_H
- #define UPLOADFRAME_H
- #include <QWidget>
- #include<QFrame>
- class QLabel;
- class QIcon;
- class QPushButton;
- class QLineEdit;
- class QTextBrower;
- class QToolButton;
- class UpLoadFrame : public QWidget
- {
- Q_OBJECT
- public:
- explicit UpLoadFrame(QWidget *parent = 0);
- void init();
- QString getWritername();
- QString getBookname();
- QString getPublisername();
- QString getAboutBook();
- QPixmap getBookfage();
- signals:
- protected slots:
- void doChoosepathbutton();
- void doSaveButton();
- void doBookFaceClicked();
- private:
- QLineEdit *filepath;
- QPushButton *choosepath;
- QToolButton *bookface;
- QLineEdit *writername;
- QLineEdit *publisher;
- QLineEdit *bookname;
- QLineEdit *aboutbook;
- QPushButton *saveButton;
- QString fileName;
- QString picpath;
- };
- #endif // UPLOADFRAME_H
重点是实现三个槽。 首先是第一个槽,doChoosepathbutton() ,通过店家choosepath按键,打开一个选择文件的对话框选择文件,在该函数中实现文件路径的读取,通过文件的读取,自动设置书名。实现内容如下:
- void UpLoadFrame::doChoosepathbutton()
- {
- fileName =QFileDialog::getOpenFileName(this,tr("打开文件"));
- filepath->setText(fileName);
- QFileInfo info(fileName);
- bookname->setText(info.baseName());
- }
其中一个关键的只是点是关于QFileDialog的知识点:
QFileDialog可以创建一个对话框,允许用于选择文件和目录。getOpenFileName()函数可以选择一个已经存在于目录下的文件,如果取消了文件的选择,就会返回已给空的指针。第一个参数代表父空间的指针地址,第二个是代表对话框的名称。
其次是实现doSaveButton(),当得到需要复制的文件后,就需要比较负责的文件操作了,比如文件的复制,目录的创建以及文本文件的信息的写入。以下是实现的内容:
- void UpLoadFrame::doSaveButton()
- {
- QFile file(fileName);
- QFileInfo info(fileName);
- QString newpath=QString("G:/Reader_Resource")+QString("/");
- //------------------------创建对应书籍的目录------------------------//
- QDir dir;
- dir.cd(newpath);
- dir.mkdir(info.baseName());
- newpath+=info.baseName();
- //----------------读取图书的信息并保存在对应的目录下-----------------//
- QFile bookinfo(newpath+"/"+info.baseName()+".txt");
- QFileInfo tmp(bookinfo);
- aboutbook->setText(tmp.absoluteFilePath());
- if( bookinfo.open(QFile::ReadWrite))
- {
- QTextStream out(&bookinfo);
- out<<writername->text()<<"\r\n"<<endl;
- out<<bookname->text()<<"\r\n"<<endl;
- out<<publisher->text()<<"\r\n"<<endl;
- }
- bookinfo.setFileName(info.baseName()+".txt");
- bookinfo.close();
- //--------------------------------------------------------------//
- newpath+=QString("/");
- //----------------------复制图片封面信息------------------------//
- QFile picfile(picpath);
- QFileInfo picinfo(picfile);
- QString temptopicpath=newpath;
- temptopicpath+=picinfo.fileName();
- picfile.copy(temptopicpath);
- picfile.close();
- //-------------------------复制文件到相应目录------------------------//
- newpath+=info.fileName();
- file.copy(newpath);
- file.close();
- QFile checkpath(newpath);
- if(checkpath.open(QFile::ReadOnly))
- {
- QMessageBox msgBox;
- msgBox.setText("文件复制成功");
- msgBox.setStandardButtons(QMessageBox::Ok);
- msgBox.exec();
- }
- checkpath.close();
- }
对以上的代码实现进行简答的解释:
1、对doChoopathbutton()函数中得到的fileName进行文件的读取,即QFile(fileName);
2、对fileName进行文件信息的解析,即通过QFileInfo实现;
3、在对应的newpath下目录下创建目录,目录名为需要复制的文件的文件名,不包含后缀名,这里文件名默认为书名
4、bookinfo是对书名、作者以及出版商信息的读取,并且写入到文本文件中;
5、copy函数是实现文件的复制的关键函数,QFile类的成员函数copy()的参数代表需要复制的新的文件的绝对路径信息。
最后实现的结果如图所示:
最后实现的结果如图所示:
可以看到,最后实现了需要达到的目。
完成的实现代码如下:
- #include "uploadframe.h"
- #include<QLabel>
- #include<QIcon>
- #include<QLineEdit>
- #include<QPushButton>
- #include<QTextBrowser>
- #include<QToolButton>
- #include<QHBoxLayout>
- #include<QVBoxLayout>
- #include<QFile>
- #include<QFIleDialog>
- #include<QFileInfo>
- #include<QMessageBox>
- #include<QDir>
- #include<QTextStream>
- UpLoadFrame::UpLoadFrame(QWidget *parent) : QWidget(parent)
- {
- filepath=new QLineEdit(this);
- choosepath=new QPushButton(this);
- bookface=new QToolButton();
- writername=new QLineEdit(this);
- publisher=new QLineEdit(this);
- bookname=new QLineEdit(this);
- aboutbook=new QLineEdit(this);
- init();
- connect(choosepath,SIGNAL(clicked(bool)),this,SLOT(doChoosepathbutton()));
- connect(saveButton,SIGNAL(clicked(bool)),this,SLOT(doSaveButton()));
- connect(bookface,SIGNAL(clicked(bool)),this,SLOT(doBookFaceClicked()));
- setFixedSize(400,300);
- }
- void UpLoadFrame::init()
- {
- QVBoxLayout *mainLayout=new QVBoxLayout(this);
- QHBoxLayout *hLayout_one=new QHBoxLayout(this);
- filepath->setMinimumSize(250,20);
- filepath->setMaximumSize(250,20);
- filepath->setContentsMargins(0,0,0,0);
- choosepath->setText("选择文件");
- choosepath->setMaximumHeight(30);
- choosepath->setMinimumHeight(30);
- choosepath->setContentsMargins(0,0,0,0);
- hLayout_one->addWidget(filepath);
- hLayout_one->addStretch();
- hLayout_one->addWidget(choosepath);
- hLayout_one->setContentsMargins(0,0,0,0);
- QHBoxLayout *hLayout_two=new QHBoxLayout(this);
- bookface->setIconSize(QSize(150,150));
- QVBoxLayout *vLayout_bookinfo=new QVBoxLayout(this);
- QHBoxLayout *hLayout_two_one=new QHBoxLayout(this);
- QLabel *static_writer=new QLabel("作者",this);
- writername->setFixedSize(100,30);
- hLayout_two_one->addWidget(static_writer);
- hLayout_two_one->addStretch();
- hLayout_two_one->addWidget(writername);
- QHBoxLayout *hLayout_two_two=new QHBoxLayout(this);
- QLabel *static_bookname=new QLabel("书名",this);
- bookname->setFixedSize(100,30);
- hLayout_two_two->addWidget(static_bookname);
- hLayout_two_two->addStretch();
- hLayout_two_two->addWidget(bookname);
- QHBoxLayout *hLayout_two_three=new QHBoxLayout(this);
- QLabel *static_publisher=new QLabel("出版社",this);
- publisher->setFixedSize(100,30);
- hLayout_two_three->addWidget(static_publisher);
- hLayout_two_three->addStretch();
- hLayout_two_three->addWidget(publisher);
- vLayout_bookinfo->addLayout(hLayout_two_one);
- vLayout_bookinfo->addLayout(hLayout_two_two);
- vLayout_bookinfo->addLayout(hLayout_two_three);
- hLayout_two->addWidget(bookface);
- hLayout_two->addStretch();
- hLayout_two->addLayout(vLayout_bookinfo);
- aboutbook =new QLineEdit(this);
- saveButton=new QPushButton(this);
- saveButton->setText("保存文件");
- saveButton->setMinimumWidth(this->width()*0.8);
- mainLayout->addLayout(hLayout_one);
- mainLayout->addStretch();
- mainLayout->addLayout(hLayout_two);
- mainLayout->addWidget(saveButton);
- mainLayout->addWidget(aboutbook);
- setLayout(mainLayout);
- }
- void UpLoadFrame::doChoosepathbutton()
- {
- fileName =QFileDialog::getOpenFileName(this,tr("打开文件"));
- filepath->setText(fileName);
- QFileInfo info(fileName);
- bookname->setText(info.baseName());
- }
- void UpLoadFrame::doSaveButton()
- {
- QFile file(fileName);
- QFileInfo info(fileName);
- QString newpath=QString("G:/Reader_Resource")+QString("/");
- //------------------------创建对应书籍的目录------------------------//
- QDir dir;
- dir.cd(newpath);
- dir.mkdir(info.baseName());
- newpath+=info.baseName();
- //----------------读取图书的信息并保存在对应的目录下-----------------//
- QFile bookinfo(newpath+"/"+info.baseName()+".txt");
- QFileInfo tmp(bookinfo);
- aboutbook->setText(tmp.absoluteFilePath());
- if( bookinfo.open(QFile::ReadWrite))
- {
- QTextStream out(&bookinfo);
- out<<writername->text()<<"\r\n"<<endl;
- out<<bookname->text()<<"\r\n"<<endl;
- out<<publisher->text()<<"\r\n"<<endl;
- }
- bookinfo.setFileName(info.baseName()+".txt");
- bookinfo.close();
- //--------------------------------------------------------------//
- newpath+=QString("/");
- //----------------------复制图片封面信息------------------------//
- QFile picfile(picpath);
- QFileInfo picinfo(picfile);
- QString temptopicpath=newpath;
- temptopicpath+=picinfo.fileName();
- picfile.copy(temptopicpath);
- picfile.close();
- //-------------------------复制文件到相应目录------------------------//
- newpath+=info.fileName();
- file.copy(newpath);
- file.close();
- QFile checkpath(newpath);
- if(checkpath.open(QFile::ReadOnly))
- {
- QMessageBox msgBox;
- msgBox.setText("文件复制成功");
- msgBox.setStandardButtons(QMessageBox::Ok);
- msgBox.exec();
- }
- checkpath.close();
- }
- void UpLoadFrame::doBookFaceClicked()
- {
- picpath=QFileDialog::getOpenFileName(this,"指定封面");
- bookface->setIcon(QIcon(picpath));
- }
博客原文地址:http://blog.csdn.net/mao19931004/article/details/51501200
Qt5 实现文件复制并在指定路径下创建文件夹相关推荐
- python创建文件夹用什么函数_Python——os.mkdir()在指定路径下创建文件夹 + 路径的连接理解...
Python--os.mkdir()在指定路径下创建文件夹 + 路径的连接理解 发布时间:2018-11-16 17:08, 浏览次数:512 , 标签: Python os mkdir 引子: 我在 ...
- CopyFile复制单个文件和复制指定路径下所有文件
CopyFile复制单个文件和复制指定路径下所有文件 1.CopyFile复制单个文件 2.CopyFile复制指定路径下所有文件 1.CopyFile复制单个文件 原型: BOOL CopyFile ...
- R语言使用fs包的dir_create函数在指定路径下创建新的文件夹、使用file_create函数在指定文件夹下创建文件
R语言使用fs包的dir_create函数在指定路径下创建新的文件夹.使用file_create函数在指定文件夹下创建文件 目录
- 删除指定路径下的文件
string pathstr = System.Web.HttpContext.Current.Server.MapPath("/FilePath"); if (Directory ...
- Python碎片化学习教程 @19. 在指定路径下创建.txt文件,并写入内容
代码功能:在指定路径下创建.txt文件,并写入内容 代码如下: file = open("1.txt", "w", encoding="utf8&qu ...
- Java向将指定文件(含文件列表)或者指定路径下目录打包成zip格式
Java向将指定文件(含文件列表)或者指定路径下目录打包成zip格式 运行环境 pom依赖 测试方法 测试效果 运行环境 1.springboot 2.2.x 2.maven 3.5.4 pom依赖 ...
- 删除指定路径下的文件及文件夹操作
1.删除指定路径下的文件及文件夹是指将次路径下的的文件夹内(包含此文件夹)所有的文件及文件夹全部删除. 2.DeleteRuninFile中删除文件的代码主要在两个方法中,如下: private bo ...
- 加载指定路径下所有文件
工作中经常遇到加载某个文件夹下的所有文件,然后对文件遍历,今天写代码时遇到一个好的类ArrayDeque,整理一下,做一下笔记 下面写了一个测试类 package com.hpzx.test;impo ...
- Java读取指定路径下的文件列表
直接贴代码吧.不过这里要做一个简单的说明,对于这个程序,我们必须保证我们在F盘下有一个log_files的文件夹,因为在后面写入文件的时候,如果路径中的文件不存在,是程序可以自动为其添加,但如果没有了 ...
最新文章
- 人工智能 | 自然语言处理(NLP)研究团队
- 深度学习-Tensorflow2.2-批标准化简介-14
- 内网渗透-域内信息收集
- $.post()提交了数据,return不给跳转
- jenkins解决jenkins内存溢出问题
- 怎么知道自己是否适合计算机专业,事实:我怎么知道我的旧计算机是否适合win7或win10?...
- python 输出彩色文字
- 穷的时候要记住这5点,才能有机会翻身
- 那些让你爱不释手的 Spring 代码技巧
- oracle 访问adf 慢,ORACLE ADF 问题总结
- 回归分析常数项t值没有显著异于零怎么办_洋蜜蜂统计辅导专题:回归分析关键词统计量须知...
- 基于Springboot的个人健康监控管理系统
- 基于PHP+Zend Studio 13 + MYSQL+饭店预订管理系统
- Component is missing template or render function
- win7开机显示计算机无法启动,win7无法开机怎么办?解决开机报错代码C0000034的方法...
- 前端安全跨站脚本攻击
- 风控为本 开鑫金服让互联网金融更有安全感
- OPC配置客户端和服务端
- 套用模板,又申请了两张软著证书
- android 同步短信恢复,手机短信一键恢复软件(教你简单一招恢复技巧)
热门文章
- 要学计算机买macbook,我是学平面设计的,买苹果电脑需要什么样的配置以上?...
- ShaderJoy —— “水面波纹消散” 的实现 【GLSL】
- CSP 2022 游寄
- 如何通过 WhatsApp 开展营销活动?
- SSH远程ubuntu【无公网IP、内网穿透】 3-3
- CAD点位坐标提取的方法
- clickhouse集群搭建
- 分享三个前端学习方法和十项前端面试笔记:为想去的公司努力一把
- 【TypeScript】JSX 元素隐式具有类型 “any“,因为不存在接口 “JSX.IntrinsicElements“。ts(7026)
- vscode背景图片无法删除