• 20354阅读
  • 12回复

[提问]Qt如何实现删除文件夹? [复制链接]

上一主题 下一主题
离线xiumingjun
 

只看楼主 倒序阅读 楼主  发表于: 2011-10-31
我现在要用Qt编程实现删除文件的目的,但是试过几个函数后都不可以。
用QFile::remove()函数和 QDir::rmdir()函数虽然能删除,但是前者和后者只能删除单一的文件,一旦该文件夹下还有其他文件时,就不能删除了。
我想请教各位,当一个文件下还有其它文件时,应该如何直接删除该文件?
虽然在linux中断中,可以通过命令 rm -r 来实现。但总不能把linux的库也加进去吧!!!
离线uidab

只看该作者 1楼 发表于: 2011-10-31
回 楼主(xiumingjun) 的帖子
做个递归,先删文件再删目录。
我上次做了一个,实验的时候把自己的D盘都删了!!!还好有恢复软件。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线weihua1984

只看该作者 2楼 发表于: 2011-10-31
楼上正解
离线XChinux

只看该作者 3楼 发表于: 2011-10-31
或者你直接带个rm(.exe)文件,调用它来删除,呵呵。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线zhy282289
只看该作者 4楼 发表于: 2011-10-31
你把要删除的文件夹改个名字~是不是就相当于删了~
嘎嘎...你看不到你看不到
为什么我脸这么胖~
离线roywillow

只看该作者 5楼 发表于: 2011-10-31
回 3楼(XChinux) 的帖子
rm.exe这种东西能保证跨平台么……感觉在linux上调用肯定行不通吧……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线xiumingjun

只看该作者 6楼 发表于: 2011-11-01
哦,也就是Qt本身不具有这个功能,要像删除的话只能是递归调用,一个一个删除了?
离线xiumingjun

只看该作者 7楼 发表于: 2011-11-01
回 1楼(uidab) 的帖子
大虾,你写的递归函数,是先找到该文件夹,通过遍历它的子目录来一个一个删除的嘛?
如果是这样的话,怎么会把整个D盘都删掉啊?
能不能分享一下代码啊
离线uidab

只看该作者 8楼 发表于: 2011-11-01
回 7楼(xiumingjun) 的帖子
我是输入目录名称啊,就直接删除。上次不小心输入D:\,结果你是可想而知的。程序你可以在网上搜搜,有很多啊。如果实在找不到再告诉我。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线xiumingjun

只看该作者 9楼 发表于: 2011-11-01
回 8楼(uidab) 的帖子
哦,好吧,刚才看了一下Qt帮助也没找到相关的函数。我在查查资料吧,实在实现不了还得麻烦你啊
离线XChinux

只看该作者 10楼 发表于: 2011-11-02
Linux/Unix下的rm命令这个不用说了吧。
Windows下,找一个msys的rm.exe(依赖于msys-1.dll),放到当前目录下就可以用了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线xiumingjun

只看该作者 11楼 发表于: 2011-11-02
终于实现啦,虽然不是我写的,但是还是分享一下:

void file::deleteDirectory(QFileInfo fileList){

if(fileList.isDir()){
int childCount =0;
QString dir = fileList.filePath();
QDir thisDir(dir);
childCount = thisDir.entryInfoList().count();
QFileInfoList newFileList = thisDir.entryInfoList();
if(childCount>2){
for(int i=0;i<childCount;i++){
if(newFileList.at(i).fileName().operator ==(".")|newFileList.at(i).fileName().operator ==("..")){
continue;
}
deleteDirectory(newFileList.at(i));
}
}
fileList.absoluteDir().rmpath(fileList.fileName());
}else if(fileList.isFile()){
fileList.absoluteDir().remove(fileList.fileName());
}

离线firerun

只看该作者 12楼 发表于: 2013-09-17
1楼的真心欢乐,肚子都笑的疼。
快速回复
限100 字节
 
上一个 下一个