最近在基于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()可以获得文件的基本名称,即不包含后缀名。

下面一个简单的实例,可以通过选择需要复制的文件,复制到相应的目录下。同时根据文件名,在相应的目录下创建对应文件的子目录。实现的是,在一个界面进行文件的操作,包括录入图书的信息,包括书名,作者以及出版商,以及书的封面,然后保存。

头文件内容为:

[cpp]  view plain  copy  
  1. #ifndef UPLOADFRAME_H
  2. #define UPLOADFRAME_H
  3. #include <QWidget>
  4. #include<QFrame>
  5. class QLabel;
  6. class QIcon;
  7. class QPushButton;
  8. class QLineEdit;
  9. class QTextBrower;
  10. class QToolButton;
  11. class UpLoadFrame : public QWidget
  12. {
  13. Q_OBJECT
  14. public:
  15. explicit UpLoadFrame(QWidget *parent = 0);
  16. void init();
  17. QString getWritername();
  18. QString getBookname();
  19. QString getPublisername();
  20. QString getAboutBook();
  21. QPixmap getBookfage();
  22. signals:
  23. protected slots:
  24. void doChoosepathbutton();
  25. void doSaveButton();
  26. void doBookFaceClicked();
  27. private:
  28. QLineEdit *filepath;
  29. QPushButton *choosepath;
  30. QToolButton *bookface;
  31. QLineEdit *writername;
  32. QLineEdit *publisher;
  33. QLineEdit *bookname;
  34. QLineEdit *aboutbook;
  35. QPushButton *saveButton;
  36. QString fileName;
  37. QString picpath;
  38. };
  39. #endif // UPLOADFRAME_H

重点是实现三个槽。 首先是第一个槽,doChoosepathbutton() ,通过店家choosepath按键,打开一个选择文件的对话框选择文件,在该函数中实现文件路径的读取,通过文件的读取,自动设置书名。实现内容如下:

[cpp]  view plain  copy  
  1. void UpLoadFrame::doChoosepathbutton()
  2. {
  3. fileName =QFileDialog::getOpenFileName(this,tr("打开文件"));
  4. filepath->setText(fileName);
  5. QFileInfo info(fileName);
  6. bookname->setText(info.baseName());
  7. }

其中一个关键的只是点是关于QFileDialog的知识点:

QFileDialog可以创建一个对话框,允许用于选择文件和目录。getOpenFileName()函数可以选择一个已经存在于目录下的文件,如果取消了文件的选择,就会返回已给空的指针。第一个参数代表父空间的指针地址,第二个是代表对话框的名称。

其次是实现doSaveButton(),当得到需要复制的文件后,就需要比较负责的文件操作了,比如文件的复制,目录的创建以及文本文件的信息的写入。以下是实现的内容:

[cpp]  view plain  copy  
  1. void UpLoadFrame::doSaveButton()
  2. {
  3. QFile file(fileName);
  4. QFileInfo info(fileName);
  5. QString newpath=QString("G:/Reader_Resource")+QString("/");
  6. //------------------------创建对应书籍的目录------------------------//
  7. QDir dir;
  8. dir.cd(newpath);
  9. dir.mkdir(info.baseName());
  10. newpath+=info.baseName();
  11. //----------------读取图书的信息并保存在对应的目录下-----------------//
  12. QFile bookinfo(newpath+"/"+info.baseName()+".txt");
  13. QFileInfo tmp(bookinfo);
  14. aboutbook->setText(tmp.absoluteFilePath());
  15. if( bookinfo.open(QFile::ReadWrite))
  16. {
  17. QTextStream out(&bookinfo);
  18. out<<writername->text()<<"\r\n"<<endl;
  19. out<<bookname->text()<<"\r\n"<<endl;
  20. out<<publisher->text()<<"\r\n"<<endl;
  21. }
  22. bookinfo.setFileName(info.baseName()+".txt");
  23. bookinfo.close();
  24. //--------------------------------------------------------------//
  25. newpath+=QString("/");
  26. //----------------------复制图片封面信息------------------------//
  27. QFile picfile(picpath);
  28. QFileInfo picinfo(picfile);
  29. QString temptopicpath=newpath;
  30. temptopicpath+=picinfo.fileName();
  31. picfile.copy(temptopicpath);
  32. picfile.close();
  33. //-------------------------复制文件到相应目录------------------------//
  34. newpath+=info.fileName();
  35. file.copy(newpath);
  36. file.close();
  37. QFile checkpath(newpath);
  38. if(checkpath.open(QFile::ReadOnly))
  39. {
  40. QMessageBox msgBox;
  41. msgBox.setText("文件复制成功");
  42. msgBox.setStandardButtons(QMessageBox::Ok);
  43. msgBox.exec();
  44. }
  45. checkpath.close();
  46. }

对以上的代码实现进行简答的解释:

1、对doChoopathbutton()函数中得到的fileName进行文件的读取,即QFile(fileName);

2、对fileName进行文件信息的解析,即通过QFileInfo实现;

3、在对应的newpath下目录下创建目录,目录名为需要复制的文件的文件名,不包含后缀名,这里文件名默认为书名

4、bookinfo是对书名、作者以及出版商信息的读取,并且写入到文本文件中;

5、copy函数是实现文件的复制的关键函数,QFile类的成员函数copy()的参数代表需要复制的新的文件的绝对路径信息。

最后实现的结果如图所示:

最后实现的结果如图所示:

可以看到,最后实现了需要达到的目。

完成的实现代码如下:

[cpp]  view plain  copy  
  1. #include "uploadframe.h"
  2. #include<QLabel>
  3. #include<QIcon>
  4. #include<QLineEdit>
  5. #include<QPushButton>
  6. #include<QTextBrowser>
  7. #include<QToolButton>
  8. #include<QHBoxLayout>
  9. #include<QVBoxLayout>
  10. #include<QFile>
  11. #include<QFIleDialog>
  12. #include<QFileInfo>
  13. #include<QMessageBox>
  14. #include<QDir>
  15. #include<QTextStream>
  16. UpLoadFrame::UpLoadFrame(QWidget *parent) : QWidget(parent)
  17. {
  18. filepath=new QLineEdit(this);
  19. choosepath=new QPushButton(this);
  20. bookface=new QToolButton();
  21. writername=new QLineEdit(this);
  22. publisher=new QLineEdit(this);
  23. bookname=new QLineEdit(this);
  24. aboutbook=new QLineEdit(this);
  25. init();
  26. connect(choosepath,SIGNAL(clicked(bool)),this,SLOT(doChoosepathbutton()));
  27. connect(saveButton,SIGNAL(clicked(bool)),this,SLOT(doSaveButton()));
  28. connect(bookface,SIGNAL(clicked(bool)),this,SLOT(doBookFaceClicked()));
  29. setFixedSize(400,300);
  30. }
  31. void UpLoadFrame::init()
  32. {
  33. QVBoxLayout *mainLayout=new QVBoxLayout(this);
  34. QHBoxLayout *hLayout_one=new QHBoxLayout(this);
  35. filepath->setMinimumSize(250,20);
  36. filepath->setMaximumSize(250,20);
  37. filepath->setContentsMargins(0,0,0,0);
  38. choosepath->setText("选择文件");
  39. choosepath->setMaximumHeight(30);
  40. choosepath->setMinimumHeight(30);
  41. choosepath->setContentsMargins(0,0,0,0);
  42. hLayout_one->addWidget(filepath);
  43. hLayout_one->addStretch();
  44. hLayout_one->addWidget(choosepath);
  45. hLayout_one->setContentsMargins(0,0,0,0);
  46. QHBoxLayout *hLayout_two=new QHBoxLayout(this);
  47. bookface->setIconSize(QSize(150,150));
  48. QVBoxLayout *vLayout_bookinfo=new QVBoxLayout(this);
  49. QHBoxLayout *hLayout_two_one=new QHBoxLayout(this);
  50. QLabel *static_writer=new QLabel("作者",this);
  51. writername->setFixedSize(100,30);
  52. hLayout_two_one->addWidget(static_writer);
  53. hLayout_two_one->addStretch();
  54. hLayout_two_one->addWidget(writername);
  55. QHBoxLayout *hLayout_two_two=new QHBoxLayout(this);
  56. QLabel *static_bookname=new QLabel("书名",this);
  57. bookname->setFixedSize(100,30);
  58. hLayout_two_two->addWidget(static_bookname);
  59. hLayout_two_two->addStretch();
  60. hLayout_two_two->addWidget(bookname);
  61. QHBoxLayout *hLayout_two_three=new QHBoxLayout(this);
  62. QLabel *static_publisher=new QLabel("出版社",this);
  63. publisher->setFixedSize(100,30);
  64. hLayout_two_three->addWidget(static_publisher);
  65. hLayout_two_three->addStretch();
  66. hLayout_two_three->addWidget(publisher);
  67. vLayout_bookinfo->addLayout(hLayout_two_one);
  68. vLayout_bookinfo->addLayout(hLayout_two_two);
  69. vLayout_bookinfo->addLayout(hLayout_two_three);
  70. hLayout_two->addWidget(bookface);
  71. hLayout_two->addStretch();
  72. hLayout_two->addLayout(vLayout_bookinfo);
  73. aboutbook =new QLineEdit(this);
  74. saveButton=new QPushButton(this);
  75. saveButton->setText("保存文件");
  76. saveButton->setMinimumWidth(this->width()*0.8);
  77. mainLayout->addLayout(hLayout_one);
  78. mainLayout->addStretch();
  79. mainLayout->addLayout(hLayout_two);
  80. mainLayout->addWidget(saveButton);
  81. mainLayout->addWidget(aboutbook);
  82. setLayout(mainLayout);
  83. }
  84. void UpLoadFrame::doChoosepathbutton()
  85. {
  86. fileName =QFileDialog::getOpenFileName(this,tr("打开文件"));
  87. filepath->setText(fileName);
  88. QFileInfo info(fileName);
  89. bookname->setText(info.baseName());
  90. }
  91. void UpLoadFrame::doSaveButton()
  92. {
  93. QFile file(fileName);
  94. QFileInfo info(fileName);
  95. QString newpath=QString("G:/Reader_Resource")+QString("/");
  96. //------------------------创建对应书籍的目录------------------------//
  97. QDir dir;
  98. dir.cd(newpath);
  99. dir.mkdir(info.baseName());
  100. newpath+=info.baseName();
  101. //----------------读取图书的信息并保存在对应的目录下-----------------//
  102. QFile bookinfo(newpath+"/"+info.baseName()+".txt");
  103. QFileInfo tmp(bookinfo);
  104. aboutbook->setText(tmp.absoluteFilePath());
  105. if( bookinfo.open(QFile::ReadWrite))
  106. {
  107. QTextStream out(&bookinfo);
  108. out<<writername->text()<<"\r\n"<<endl;
  109. out<<bookname->text()<<"\r\n"<<endl;
  110. out<<publisher->text()<<"\r\n"<<endl;
  111. }
  112. bookinfo.setFileName(info.baseName()+".txt");
  113. bookinfo.close();
  114. //--------------------------------------------------------------//
  115. newpath+=QString("/");
  116. //----------------------复制图片封面信息------------------------//
  117. QFile picfile(picpath);
  118. QFileInfo picinfo(picfile);
  119. QString temptopicpath=newpath;
  120. temptopicpath+=picinfo.fileName();
  121. picfile.copy(temptopicpath);
  122. picfile.close();
  123. //-------------------------复制文件到相应目录------------------------//
  124. newpath+=info.fileName();
  125. file.copy(newpath);
  126. file.close();
  127. QFile checkpath(newpath);
  128. if(checkpath.open(QFile::ReadOnly))
  129. {
  130. QMessageBox msgBox;
  131. msgBox.setText("文件复制成功");
  132. msgBox.setStandardButtons(QMessageBox::Ok);
  133. msgBox.exec();
  134. }
  135. checkpath.close();
  136. }
  137. void UpLoadFrame::doBookFaceClicked()
  138. {
  139. picpath=QFileDialog::getOpenFileName(this,"指定封面");
  140. bookface->setIcon(QIcon(picpath));
  141. }

博客原文地址:http://blog.csdn.net/mao19931004/article/details/51501200

Qt5 实现文件复制并在指定路径下创建文件夹相关推荐

  1. python创建文件夹用什么函数_Python——os.mkdir()在指定路径下创建文件夹 + 路径的连接理解...

    Python--os.mkdir()在指定路径下创建文件夹 + 路径的连接理解 发布时间:2018-11-16 17:08, 浏览次数:512 , 标签: Python os mkdir 引子: 我在 ...

  2. CopyFile复制单个文件和复制指定路径下所有文件

    CopyFile复制单个文件和复制指定路径下所有文件 1.CopyFile复制单个文件 2.CopyFile复制指定路径下所有文件 1.CopyFile复制单个文件 原型: BOOL CopyFile ...

  3. R语言使用fs包的dir_create函数在指定路径下创建新的文件夹、使用file_create函数在指定文件夹下创建文件

    R语言使用fs包的dir_create函数在指定路径下创建新的文件夹.使用file_create函数在指定文件夹下创建文件 目录

  4. 删除指定路径下的文件

    string pathstr = System.Web.HttpContext.Current.Server.MapPath("/FilePath"); if (Directory ...

  5. Python碎片化学习教程 @19. 在指定路径下创建.txt文件,并写入内容

    代码功能:在指定路径下创建.txt文件,并写入内容 代码如下: file = open("1.txt", "w", encoding="utf8&qu ...

  6. Java向将指定文件(含文件列表)或者指定路径下目录打包成zip格式

    Java向将指定文件(含文件列表)或者指定路径下目录打包成zip格式 运行环境 pom依赖 测试方法 测试效果 运行环境 1.springboot 2.2.x 2.maven 3.5.4 pom依赖 ...

  7. 删除指定路径下的文件及文件夹操作

    1.删除指定路径下的文件及文件夹是指将次路径下的的文件夹内(包含此文件夹)所有的文件及文件夹全部删除. 2.DeleteRuninFile中删除文件的代码主要在两个方法中,如下: private bo ...

  8. 加载指定路径下所有文件

    工作中经常遇到加载某个文件夹下的所有文件,然后对文件遍历,今天写代码时遇到一个好的类ArrayDeque,整理一下,做一下笔记 下面写了一个测试类 package com.hpzx.test;impo ...

  9. Java读取指定路径下的文件列表

    直接贴代码吧.不过这里要做一个简单的说明,对于这个程序,我们必须保证我们在F盘下有一个log_files的文件夹,因为在后面写入文件的时候,如果路径中的文件不存在,是程序可以自动为其添加,但如果没有了 ...

最新文章

  1. 人工智能 | 自然语言处理(NLP)研究团队
  2. 深度学习-Tensorflow2.2-批标准化简介-14
  3. 内网渗透-域内信息收集
  4. $.post()提交了数据,return不给跳转
  5. jenkins解决jenkins内存溢出问题
  6. 怎么知道自己是否适合计算机专业,事实:我怎么知道我的旧计算机是否适合win7或win10?...
  7. python 输出彩色文字
  8. 穷的时候要记住这5点,才能有机会翻身
  9. 那些让你爱不释手的 Spring 代码技巧
  10. oracle 访问adf 慢,ORACLE ADF 问题总结
  11. 回归分析常数项t值没有显著异于零怎么办_洋蜜蜂统计辅导专题:回归分析关键词统计量须知...
  12. 基于Springboot的个人健康监控管理系统
  13. 基于PHP+Zend Studio 13 + MYSQL+饭店预订管理系统
  14. Component is missing template or render function
  15. win7开机显示计算机无法启动,win7无法开机怎么办?解决开机报错代码C0000034的方法...
  16. 前端安全跨站脚本攻击
  17. 风控为本 开鑫金服让互联网金融更有安全感
  18. OPC配置客户端和服务端
  19. 套用模板,又申请了两张软著证书
  20. android 同步短信恢复,手机短信一键恢复软件(教你简单一招恢复技巧)

热门文章

  1. 要学计算机买macbook,我是学平面设计的,买苹果电脑需要什么样的配置以上?...
  2. ShaderJoy —— “水面波纹消散” 的实现 【GLSL】
  3. CSP 2022 游寄
  4. 如何通过 WhatsApp 开展营销活动?
  5. SSH远程ubuntu【无公网IP、内网穿透】 3-3
  6. CAD点位坐标提取的方法
  7. clickhouse集群搭建
  8. 分享三个前端学习方法和十项前端面试笔记:为想去的公司努力一把
  9. 【TypeScript】JSX 元素隐式具有类型 “any“,因为不存在接口 “JSX.IntrinsicElements“。ts(7026)
  10. vscode背景图片无法删除