• 10680阅读
  • 5回复

自己写的Qt下拷贝文件夹的函数 [复制链接]

上一主题 下一主题
离线wangxinus
 

只看楼主 倒序阅读 楼主  发表于: 2010-01-06
— 本帖被 XChinux 设置为精华(2010-01-06) —
作者:wangxinus, <wangxinus@gmail.com>

#include <QDir>
#include <QFileInfoList>
/*
  qCopyDirectory -- 拷贝目录
  fromDir : 源目录
  toDir   : 目标目录
  bCoverIfFileExists : ture:同名时覆盖  false:同名时返回false,终止拷贝
  返回: ture拷贝成功 false:拷贝未完成
*/
bool qCopyDirectory(const QDir& fromDir, const QDir& toDir, bool bCoverIfFileExists)
{
    QDir formDir_ = fromDir;
    QDir toDir_ = toDir;

    if(!toDir_.exists())
    {
        if(!toDir_.mkdir(toDir.absolutePath()))
            return false;
    }

    QFileInfoList fileInfoList = formDir_.entryInfoList();
    foreach(QFileInfo fileInfo, fileInfoList)
    {
        if(fileInfo.fileName() == "." || fileInfo.fileName() == "..")
            continue;

        //拷贝子目录
        if(fileInfo.isDir())
        {
            //递归调用拷贝
            if(!qCopyDirectory(fileInfo.filePath(), toDir_.filePath(fileInfo.fileName())))
                return false;
        }
        //拷贝子文件
        else
        {
            if(bCoverIfFileExists && toDir_.exists(fileInfo.fileName()))
            {
                toDir_.remove(fileInfo.fileName());
            }
            if(!QFile::copy(fileInfo.filePath(), toDir_.filePath(fileInfo.fileName())))
            {
                return false;
            }
        }
    }
    return true;
}
[ 此帖被wangxinus在2010-04-13 12:56重新编辑 ]
http://www.wangxinus.com
自己刚刚开的博客,欢迎来访!征友链!

网心幽思 - WangXinus' Home
不积跬步,无以致千里;不积小流,无以成江海。
离线jorneyr

只看该作者 1楼 发表于: 2010-01-06
QFile::copy
这个函数使用有时候会出问题。
例如我的一个程序正在连接着sqlite数据库,而我此时想使用QFile::copy复制这个sqlite数据库,复制出来的新文件是空的。而改用readRawData来实现复制这个数据库,一切就正常了。
离线wangxinus

只看该作者 2楼 发表于: 2010-01-06
引用第1楼jorneyr于2010-01-06 16:26发表的  :
QFile::copy
这个函数使用有时候会出问题。
例如我的一个程序正在连接着sqlite数据库,而我此时想使用QFile::copy复制这个sqlite数据库,复制出来的新文件是空的。而改用readRawData来实现复制这个数据库,一切就正常了。


我没有遇到这样的问题,不过我记下了。如果碰到我再深入地看看。
http://www.wangxinus.com
自己刚刚开的博客,欢迎来访!征友链!

网心幽思 - WangXinus' Home
不积跬步,无以致千里;不积小流,无以成江海。
离线liutao6982
只看该作者 3楼 发表于: 2010-01-06
不错,支持一下
离线nmiirq

只看该作者 4楼 发表于: 2010-06-10
  if(!qCopyDirectory(fileInfo.filePath(), toDir_.filePath(fileInfo.fileName())))
这一行,最后应该加上bCoverIfFileExists这个参数吧?
离线stlcours

只看该作者 5楼 发表于: 2015-08-16
回 jorneyr 的帖子
jorneyr:QFile::copy
这个函数使用有时候会出问题。
例如我的一个程序正在连接着sqlite数据库,而我此时想使用QFile::copy复制这个sqlite数据库,复制出来的新文件是空的。而改用readRawData来实现复制这个数据库,一切就正常了。 (2010-01-06 16:26) 

哇,readRawData这个函数这么牛?还有其它心得吗?
快速回复
限100 字节
 
上一个 下一个