当前位置:   article > 正文

Qt:把文件夹从A移动到B

Qt:把文件夹从A移动到B

QT 文件复制,移动(剪切)操作_qt剪切文件到指定路径-CSDN博客 

如何移动一个文件? 

  1. QString old_name=QString("D:\\c++\\c++优秀源码学习.txt");
  2. QString new_name=QString("D:\\c++优秀源码学习.txt");
  3. bool x= QFile::rename(old_name,new_name); //A路径移动到B路径
  4. qDebug()<<x;
  5. //true
  1. QString old_name=QString("D:\\c++\\c++优秀源码学习.txt");
  2. QString new_name=QString("D:\\123456\\c++优秀源码学习.txt");
  3. bool x= QFile::rename(old_name,new_name); //A路径移动到B路径
  4. qDebug()<<x;
  5. //false:因为没有D:\\123456这个目录。需要先创建该目录。

如何移动文件夹(包含里面的全部内容):

  1. #include "widget.h"
  2. #include <QApplication>
  3. #include <QFile>
  4. #include <QDebug>
  5. #include <QDir>
  6. #include <unistd.h>
  7. QString old_path;
  8. QString new_path;
  9. void create_Multilevel_folder(char* path)
  10. {
  11. int len = strlen(path);
  12. int _len = 0;
  13. for (int i = 0; i < len; ++i)
  14. {
  15. if (path[i] == '/') {
  16. _len++;
  17. }
  18. }
  19. int* a = new int[_len];
  20. memset(a, 0, sizeof(a));
  21. for (int i = 0, b = 0; i < len; ++i)
  22. {
  23. if (path[i] == '/') {
  24. a[b] = i;
  25. b++;
  26. }
  27. }
  28. for (int i = 0; i < _len; i++)
  29. {
  30. char p[4096];
  31. strcpy(p, path);
  32. p[a[i]] = '\0';
  33. if (access(p, 0) == -1) {
  34. qDebug()<<"不存在,创建一个";
  35. mkdir(p);
  36. }
  37. }
  38. }
  39. void print_Files(QString path)
  40. {
  41. QDir dir(path);
  42. dir.setFilter(QDir::Files | QDir::NoDotAndDotDot);
  43. QStringList list = dir.entryList();
  44. for (int i = 0; i < list.count(); ++i)
  45. {
  46. QString path1 = path + "/" + list[i];
  47. qDebug() <<"Old_Files:"<< path1;
  48. //替换
  49. QString path2=path1.right(path1.length()-old_path.length());
  50. QString path3=new_path+path2;
  51. qDebug()<<path3;
  52. qDebug()<<"New_Files:"<<QFile::rename(path1,path3);
  53. }
  54. }
  55. void print_files_and_dirs(QString path)
  56. {
  57. QDir dir(path);
  58. dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
  59. QStringList list = dir.entryList();
  60. for (int i = 0; i < list.count(); ++i)
  61. {
  62. QString path1 = path + "/" + list[i];
  63. qDebug() <<"old_Dir:"<< path1;
  64. QString path2=path1.right(path1.length()-old_path.length());
  65. QString path3=new_path+path2+"/";
  66. qDebug()<<"new_Dir:"<<path3;
  67. create_Multilevel_folder(path3.toLocal8Bit().data());
  68. print_files_and_dirs(path1);//前面要加上前缀
  69. }
  70. print_Files(path);
  71. }
  72. int main(int argc, char *argv[])
  73. {
  74. QApplication a(argc, argv);
  75. old_path="D:/Qt/zip";
  76. new_path="D:/Qt/aaa";
  77. QString str=new_path+"/";
  78. create_Multilevel_folder(str.toLocal8Bit().data());
  79. print_files_and_dirs(old_path);
  80. return a.exec();
  81. }

如何删除文件夹:

Qt拷贝文件、文件夹、创建文件夹、删除文件夹操作_qtmakedir文件夹-CSDN博客

  1. QString str="D:/Qt/a";
  2. QDir dir(str);
  3. if(!dir.exists()){
  4. qDebug()<<"not exists";
  5. }
  6. qDebug()<<dir.rmpath(dir.absolutePath());

当文件夹为空时,删除成功。

当文件夹不为空时,删除失败。

删除文件夹(递归)(文件夹中必须只有文件夹)

  1. bool del_folder(QString str)
  2. {
  3. QDir dir(str);
  4. if(!dir.exists()){
  5. qDebug()<<"not exists";
  6. }
  7. return dir.rmpath(dir.absolutePath());
  8. }
  9. void del_folders(QString path)
  10. {
  11. QDir dir(path);
  12. dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
  13. QStringList list = dir.entryList();
  14. //qDebug()<<"count:"<<list.count();
  15. //qDebug()<<list;
  16. for (int i = 0; i < list.count(); ++i)
  17. {
  18. QString path1 = path + "/" + list[i];
  19. qDebug() <<"old_Dir:"<< path1;
  20. del_folders(path1);
  21. }
  22. if(list.count()==0){
  23. del_folder(path);
  24. }
  25. }
  26. int main(int argc, char *argv[])
  27. {
  28. QApplication a(argc, argv);
  29. old_path="D:/app/f";
  30. del_folders(old_path);
  31. //好像找不到.vs文件
  32. return a.exec();
  33. }

但经过测试:.vs文件夹是删不掉的。

因为.vs 是隐藏文件夹

需要添加:QDir::Hidden字段。

dir.setFilter(QDir::Hidden|QDir::Dirs | QDir::NoDotAndDotDot);

功能:把文件夹从A移动到B,原位置删除。

  1. #include "widget.h"
  2. #include <QApplication>
  3. #include <QFile>
  4. #include <QDebug>
  5. #include <QDir>
  6. #include <unistd.h>
  7. QString old_path;
  8. QString new_path;
  9. void create_Multilevel_folder(char* path)
  10. {
  11. int len = strlen(path);
  12. int _len = 0;
  13. for (int i = 0; i < len; ++i)
  14. {
  15. if (path[i] == '/') {
  16. _len++;
  17. }
  18. }
  19. int* a = new int[_len];
  20. memset(a, 0, sizeof(a));
  21. for (int i = 0, b = 0; i < len; ++i)
  22. {
  23. if (path[i] == '/') {
  24. a[b] = i;
  25. b++;
  26. }
  27. }
  28. for (int i = 0; i < _len; i++)
  29. {
  30. char p[4096];
  31. strcpy(p, path);
  32. p[a[i]] = '\0';
  33. if (access(p, 0) == -1) {
  34. qDebug()<<"不存在,创建一个";
  35. mkdir(p);
  36. }
  37. }
  38. }
  39. void print_Files(QString path)
  40. {
  41. QDir dir(path);
  42. dir.setFilter(QDir::Hidden|QDir::Files | QDir::NoDotAndDotDot);
  43. QStringList list = dir.entryList();
  44. for (int i = 0; i < list.count(); ++i)
  45. {
  46. QString path1 = path + "/" + list[i];
  47. qDebug() <<"Old_Files:"<< path1;
  48. //替换
  49. QString path2=path1.right(path1.length()-old_path.length());
  50. QString path3=new_path+path2;
  51. qDebug()<<path3;
  52. qDebug()<<"New_Files:"<<QFile::rename(path1,path3);
  53. }
  54. }
  55. void print_files_and_dirs(QString path)
  56. {
  57. QDir dir(path);
  58. dir.setFilter(QDir::Hidden|QDir::Dirs | QDir::NoDotAndDotDot);
  59. QStringList list = dir.entryList();
  60. for (int i = 0; i < list.count(); ++i)
  61. {
  62. QString path1 = path + "/" + list[i];
  63. qDebug() <<"old_Dir:"<< path1;
  64. QString path2=path1.right(path1.length()-old_path.length());
  65. QString path3=new_path+path2+"/";
  66. qDebug()<<"new_Dir:"<<path3;
  67. create_Multilevel_folder(path3.toLocal8Bit().data());
  68. print_files_and_dirs(path1);//前面要加上前缀
  69. }
  70. print_Files(path);
  71. }
  72. bool del_folder(QString str)
  73. {
  74. QDir dir(str);
  75. if(!dir.exists()){
  76. qDebug()<<"not exists";
  77. }
  78. return dir.rmpath(dir.absolutePath());
  79. }
  80. void del_folders(QString path)
  81. {
  82. QDir dir(path);
  83. dir.setFilter(QDir::Hidden|QDir::Dirs | QDir::NoDotAndDotDot);
  84. QStringList list = dir.entryList();
  85. //qDebug()<<"count:"<<list.count();
  86. //qDebug()<<list;
  87. for (int i = 0; i < list.count(); ++i)
  88. {
  89. QString path1 = path + "/" + list[i];
  90. qDebug() <<"old_Dir:"<< path1;
  91. del_folders(path1);
  92. }
  93. if(list.count()==0){
  94. del_folder(path);
  95. }
  96. }
  97. int main(int argc, char *argv[])
  98. {
  99. QApplication a(argc, argv);
  100. old_path="D:/VS/ConsoleApplication1";
  101. new_path="D:/VS/ConsoleApplication2";
  102. QString str=new_path+"/";
  103. create_Multilevel_folder(str.toLocal8Bit().data());
  104. print_files_and_dirs(old_path);
  105. del_folders(old_path);
  106. return a.exec();
  107. }

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号