• 4007阅读
  • 3回复

如何递归地删除一个文件夹及其下面的所有文件呢 [复制链接]

上一主题 下一主题
离线ch19860304
 
只看楼主 倒序阅读 楼主  发表于: 2009-06-14
我是这样做的:但这样只能删除空文件夹,如果文件夹中有东西,就没不行了。
if(model->isDir(index))
        model->rmdir (index);

大家有更好的办法吗?


PS:我是在校园网,上不了这个论坛,后来又找了个代理,但只有读的权限。我每次发贴,都是找朋友帮忙的。
所以,每次问题解决,多亏了大家的帮忙,但发贴不方便,没有及时发贴感谢,请多见谅!
离线gvim
只看该作者 1楼 发表于: 2009-06-15
自己判断一下一下子节点数,然后挨个删除吧。
或者继承QDirMode,重载一下rmdir
Qt,Qt! 分享Cute之Qt体验
欢迎访问 http://www.cuteqt.com
欢迎订阅 http://www.cuteqt.com/?feed=rss2

离线ch19860304
只看该作者 2楼 发表于: 2009-06-16
我写了一个程序,只要index还有子项,rmfile就会递归地自己调用自己,但存在问题,这是为什么呢?
我把程序和问题贴出来吧。大家帮忙看看吧

model = new QDirModel ;
list = new QListView() ;
list->setModel(model);


void Imagewindow::rmfile(QModelIndex &index)
{
    QModelIndex child_index;
    int column, row, i, j;    
    model->setReadOnly(false);

    if(!model->isDir(index))
    {
        model->remove (index);
        list->update(index) ;
    }
    else
    {
    
        if(model->hasChildren (index))
        {
            /*这样求出来的column与row,数值不对*/
            column = model->columnCount(index);
            row = model->rowCount(index);
            qDebug("column = %d, row = %d!",column, row);
            for(i = 0; i <column ; i++)
                for(j = 0; j <row ; j++)
                {
                    child_index = model->index(row,column,index);
                    filename  = model->fileName(child_index); //filename没用值,
                    qDebug("name = %s!",qPrintable(filename));  
                    if(child_index.isValid())  //居然没有一个是有效的。
                        rmfile(child_index) ;  //递归地调用此函数
        
                }
                
        }
        model->rmdir (index);
        list->update(index) ;
    }
    
}
离线ch19860304
只看该作者 3楼 发表于: 2009-06-17
呼唤大牛
快速回复
限100 字节
 
上一个 下一个