Qt把文件夾從A移動到B的實現(xiàn)示例
QT 文件復(fù)制,移動(剪切)操作
文件復(fù)制
bool x= QFile::copy(old_name,new_name); qDebug()<<x;
文件移動(剪切)
QString old_name="路徑A"; QString new_name="新路徑A"; bool x= QFile::rename(old_name,new_name); //A路徑移動到B路徑 qDebug()<<x;
重命名之前,文件已經(jīng)在我程序的其他模塊中被使用了,使用中的文件是不能重命名的(win平臺下).
補充:遇到無法移動的bug,嘗試手動移動文件后在執(zhí)行程序成功
如何移動一個文件?
QString old_name=QString("D:\\c++\\c++優(yōu)秀源碼學(xué)習(xí).txt"); QString new_name=QString("D:\\c++優(yōu)秀源碼學(xué)習(xí).txt"); bool x= QFile::rename(old_name,new_name); //A路徑移動到B路徑 qDebug()<<x; //true
QString old_name=QString("D:\\c++\\c++優(yōu)秀源碼學(xué)習(xí).txt"); QString new_name=QString("D:\\123456\\c++優(yōu)秀源碼學(xué)習(xí).txt"); bool x= QFile::rename(old_name,new_name); //A路徑移動到B路徑 qDebug()<<x; //false
因為沒有D:\\123456這個目錄。需要先創(chuàng)建該目錄。
QString old_name=QString("D:\\ccc\\1.txt");//存在 QString new_name=QString("D:\\ccc\\ddd\\1.txt");//本身就存在 bool x= QFile::rename(old_name,new_name); //A路徑移動到B路徑 qDebug()<<x; //false
因為B路徑本身已經(jīng)存在同名文件,所以移動失敗。
這樣寫就可以了:
QString old_name=QString("D:\\ccc\\1.txt"); QString new_name=QString("D:\\ccc\\ddd\\1.txt"); bool is_exists=QFile::exists(new_name); if(is_exists){ QFile::remove(new_name); } bool x= QFile::rename(old_name,new_name); //A路徑移動到B路徑 qDebug()<<x;
如何移動文件夾(包含里面的全部內(nèi)容):
#include "widget.h" #include <QApplication> #include <QFile> #include <QDebug> #include <QDir> #include <unistd.h> QString old_path; QString new_path; void create_Multilevel_folder(char* path) { int len = strlen(path); int _len = 0; for (int i = 0; i < len; ++i) { if (path[i] == '/') { _len++; } } int* a = new int[_len]; memset(a, 0, sizeof(a)); for (int i = 0, b = 0; i < len; ++i) { if (path[i] == '/') { a[b] = i; b++; } } for (int i = 0; i < _len; i++) { char p[4096]; strcpy(p, path); p[a[i]] = '\0'; if (access(p, 0) == -1) { qDebug()<<"不存在,創(chuàng)建一個"; mkdir(p); } } } void print_Files(QString path) { QDir dir(path); dir.setFilter(QDir::Files | QDir::NoDotAndDotDot); QStringList list = dir.entryList(); for (int i = 0; i < list.count(); ++i) { QString path1 = path + "/" + list[i]; qDebug() <<"Old_Files:"<< path1; //替換 QString path2=path1.right(path1.length()-old_path.length()); QString path3=new_path+path2; qDebug()<<path3; qDebug()<<"New_Files:"<<QFile::rename(path1,path3); } } void print_files_and_dirs(QString path) { QDir dir(path); dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); QStringList list = dir.entryList(); for (int i = 0; i < list.count(); ++i) { QString path1 = path + "/" + list[i]; qDebug() <<"old_Dir:"<< path1; QString path2=path1.right(path1.length()-old_path.length()); QString path3=new_path+path2+"/"; qDebug()<<"new_Dir:"<<path3; create_Multilevel_folder(path3.toLocal8Bit().data()); print_files_and_dirs(path1);//前面要加上前綴 } print_Files(path); } int main(int argc, char *argv[]) { QApplication a(argc, argv); old_path="D:/Qt/zip"; new_path="D:/Qt/aaa"; QString str=new_path+"/"; create_Multilevel_folder(str.toLocal8Bit().data()); print_files_and_dirs(old_path); return a.exec(); }
如何刪除文件夾:
QString str="D:/Qt/a"; QDir dir(str); if(!dir.exists()){ qDebug()<<"not exists"; } qDebug()<<dir.rmpath(dir.absolutePath());
當(dāng)文件夾為空時,刪除成功。
當(dāng)文件夾不為空時,刪除失敗。
刪除文件夾(遞歸)(文件夾中必須只有文件夾)
bool del_folder(QString str) { QDir dir(str); if(!dir.exists()){ qDebug()<<"not exists"; } return dir.rmpath(dir.absolutePath()); } void del_folders(QString path) { QDir dir(path); dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); QStringList list = dir.entryList(); //qDebug()<<"count:"<<list.count(); //qDebug()<<list; for (int i = 0; i < list.count(); ++i) { QString path1 = path + "/" + list[i]; qDebug() <<"old_Dir:"<< path1; del_folders(path1); } if(list.count()==0){ del_folder(path); } } int main(int argc, char *argv[]) { QApplication a(argc, argv); old_path="D:/app/f"; del_folders(old_path); //好像找不到.vs文件 return a.exec(); }
但經(jīng)過測試:.vs文件夾是刪不掉的。
因為.vs 是隱藏文件夾
需要添加:QDir::Hidden字段。
dir.setFilter(QDir::Hidden|QDir::Dirs | QDir::NoDotAndDotDot);
功能:把文件夾從A移動到B,原位置刪除。
#include "widget.h" #include <QApplication> #include <QFile> #include <QDebug> #include <QDir> #include <unistd.h> QString old_path; QString new_path; void create_Multilevel_folder(char* path) { int len = strlen(path); int _len = 0; for (int i = 0; i < len; ++i) { if (path[i] == '/') { _len++; } } int* a = new int[_len]; memset(a, 0, sizeof(a)); for (int i = 0, b = 0; i < len; ++i) { if (path[i] == '/') { a[b] = i; b++; } } for (int i = 0; i < _len; i++) { char p[4096]; strcpy(p, path); p[a[i]] = '\0'; if (access(p, 0) == -1) { qDebug()<<"不存在,創(chuàng)建一個"; mkdir(p); } } } void print_Files(QString path) { QDir dir(path); dir.setFilter(QDir::Hidden|QDir::Files | QDir::NoDotAndDotDot); QStringList list = dir.entryList(); for (int i = 0; i < list.count(); ++i) { QString path1 = path + "/" + list[i]; qDebug() <<"Old_Files:"<< path1; //替換 QString path2=path1.right(path1.length()-old_path.length()); QString path3=new_path+path2; qDebug()<<path3; qDebug()<<"New_Files:"<<QFile::rename(path1,path3); } } void print_files_and_dirs(QString path) { QDir dir(path); dir.setFilter(QDir::Hidden|QDir::Dirs | QDir::NoDotAndDotDot); QStringList list = dir.entryList(); for (int i = 0; i < list.count(); ++i) { QString path1 = path + "/" + list[i]; qDebug() <<"old_Dir:"<< path1; QString path2=path1.right(path1.length()-old_path.length()); QString path3=new_path+path2+"/"; qDebug()<<"new_Dir:"<<path3; create_Multilevel_folder(path3.toLocal8Bit().data()); print_files_and_dirs(path1);//前面要加上前綴 } print_Files(path); } bool del_folder(QString str) { QDir dir(str); if(!dir.exists()){ qDebug()<<"not exists"; } return dir.rmpath(dir.absolutePath()); } void del_folders(QString path) { QDir dir(path); dir.setFilter(QDir::Hidden|QDir::Dirs | QDir::NoDotAndDotDot); QStringList list = dir.entryList(); //qDebug()<<"count:"<<list.count(); //qDebug()<<list; for (int i = 0; i < list.count(); ++i) { QString path1 = path + "/" + list[i]; qDebug() <<"old_Dir:"<< path1; del_folders(path1); } if(list.count()==0){ del_folder(path); } } int main(int argc, char *argv[]) { QApplication a(argc, argv); old_path="D:/VS/ConsoleApplication1"; new_path="D:/VS/ConsoleApplication2"; QString str=new_path+"/"; create_Multilevel_folder(str.toLocal8Bit().data()); print_files_and_dirs(old_path); del_folders(old_path); return a.exec(); }
到此這篇關(guān)于Qt把文件夾從A移動到B的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Qt把文件夾從A移動到B內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在C++中把字符串轉(zhuǎn)換為整數(shù)的兩種簡單方法
經(jīng)常會遇到類型轉(zhuǎn)換,本文主要介紹了C++中把字符串轉(zhuǎn)換為整數(shù)的兩種簡單方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06C++數(shù)據(jù)結(jié)構(gòu)之單鏈表
這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之單鏈表,鏈表是由一個個結(jié)點鏈結(jié)成的。結(jié)點包括數(shù)據(jù)域和指針域兩部分,數(shù)據(jù)域用來存儲數(shù)據(jù)元素的信息,指針域用來存儲下一個結(jié)點的地址,更詳細(xì)內(nèi)容請需要的小伙伴參考下面文章內(nèi)容2022-01-01