Qt把文件夾從A移動(dòng)到B的實(shí)現(xiàn)示例
QT 文件復(fù)制,移動(dòng)(剪切)操作
文件復(fù)制
bool x= QFile::copy(old_name,new_name); qDebug()<<x;
文件移動(dòng)(剪切)
QString old_name="路徑A"; QString new_name="新路徑A"; bool x= QFile::rename(old_name,new_name); //A路徑移動(dòng)到B路徑 qDebug()<<x;
重命名之前,文件已經(jīng)在我程序的其他模塊中被使用了,使用中的文件是不能重命名的(win平臺(tái)下).
補(bǔ)充:遇到無法移動(dòng)的bug,嘗試手動(dòng)移動(dòng)文件后在執(zhí)行程序成功
如何移動(dòng)一個(gè)文件?
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路徑移動(dòng)到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路徑移動(dòng)到B路徑 qDebug()<<x; //false
因?yàn)闆]有D:\\123456這個(gè)目錄。需要先創(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路徑移動(dòng)到B路徑 qDebug()<<x; //false
因?yàn)锽路徑本身已經(jīng)存在同名文件,所以移動(dò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路徑移動(dòng)到B路徑 qDebug()<<x;
如何移動(dòng)文件夾(包含里面的全部內(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)建一個(gè)"; 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)文件夾為空時(shí),刪除成功。
當(dāng)文件夾不為空時(shí),刪除失敗。
刪除文件夾(遞歸)(文件夾中必須只有文件夾)
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)過測(cè)試:.vs文件夾是刪不掉的。
因?yàn)?strong>.vs 是隱藏文件夾
需要添加:QDir::Hidden字段。
dir.setFilter(QDir::Hidden|QDir::Dirs | QDir::NoDotAndDotDot);
功能:把文件夾從A移動(dòng)到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)建一個(gè)"; 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移動(dòng)到B的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Qt把文件夾從A移動(dòng)到B內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Qt?QGraphicsItem?移動(dòng)時(shí)出現(xiàn)殘影問題記錄
- Qt鍵盤事件實(shí)現(xiàn)圖片在窗口上下左右移動(dòng)
- Qt實(shí)現(xiàn)拖動(dòng)單個(gè)控件移動(dòng)的示例代碼
- Qt基于QScrollArea實(shí)現(xiàn)界面嵌套移動(dòng)
- Qt圖形圖像開發(fā)之Qt曲線圖美化QChart QScatterSeries 空心點(diǎn)陣圖,鼠標(biāo)移動(dòng)到上面顯示數(shù)值,鼠標(biāo)移開數(shù)值消失效果實(shí)例
- Qt實(shí)現(xiàn)圖片移動(dòng)實(shí)例(圖文教程)
相關(guān)文章
在C++中把字符串轉(zhuǎn)換為整數(shù)的兩種簡(jiǎn)單方法
經(jīng)常會(huì)遇到類型轉(zhuǎn)換,本文主要介紹了C++中把字符串轉(zhuǎn)換為整數(shù)的兩種簡(jiǎn)單方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06使用C++實(shí)現(xiàn)工資管理中的隨機(jī)教師信息生成功能
這篇文章主要介紹了使用C++實(shí)現(xiàn)工資管理中的隨機(jī)教師信息生成功能,想要做一個(gè)教師工資管理系統(tǒng),就必須得準(zhǔn)備好數(shù)據(jù),但是這些數(shù)據(jù)如果用手一行一行地敲,那么工作量是非常大的,因此,我就產(chǎn)生了用C語言實(shí)現(xiàn)直接生成大量的教師基本信息的想法,需要的朋友可以參考下2023-05-05詳解QTreeWidget隱藏節(jié)點(diǎn)的兩種方式
本文主要介紹了QTreeWidget隱藏節(jié)點(diǎn)的兩種方式,一種是直接隱藏,一種是間接隱藏,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03C++數(shù)據(jù)結(jié)構(gòu)之單鏈表
這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之單鏈表,鏈表是由一個(gè)個(gè)結(jié)點(diǎn)鏈結(jié)成的。結(jié)點(diǎn)包括數(shù)據(jù)域和指針域兩部分,數(shù)據(jù)域用來存儲(chǔ)數(shù)據(jù)元素的信息,指針域用來存儲(chǔ)下一個(gè)結(jié)點(diǎn)的地址,更詳細(xì)內(nèi)容請(qǐng)需要的小伙伴參考下面文章內(nèi)容2022-01-01