test

本文介绍了一个用于在文件系统中搜索特定文件并进行复制的功能。通过递归遍历指定目录及其子目录来查找符合要求的文件,并将找到的文件复制到目标位置。支持通配符匹配文件名,能够处理视频文件等特定类型。

 



bool DirExistFile(const QDir &srcdir, const QString fileName, int v_dir, QDir &Dir_buf)
{
     int i = v_dir;
     if(!srcdir.exists())
     return false;
     if(fileName.isEmpty())
     return false;
     if(srcdir.exists(fileName))
     {
         Dir_buf = srcdir;
         return true;
     }

 

     QDir sdir = srcdir;
     QFileInfoList fileinfolist = sdir.entryInfoList();
     foreach(QFileInfo fileInfo, fileinfolist)
     {
         if(fileInfo.fileName() == "." || fileInfo.fileName() == "..")
             continue;
         if((fileInfo.isDir()) && (i != 0))
         {
             if(i > 0)
                 i--;
             if(DirExistFile(fileInfo.filePath(), fileName, i, Dir_buf))
                 return true;
         } 
     }
     return false;
}

 

bool DirExistVideoFile(const QDir &srcdir, const QString fileName, UInt32 startid, UInt32 stopid, int v_dir, QDir &Dir_buf)
{
int i = v_dir;
if(!srcdir.exists())
return false;
if((fileName.isEmpty()) || (stopid < startid))
{
return false;
}
QString filename1;
char buff[256];

UInt32 j = startid;
int tag_exist = 1;
while((j <= stopid) && (tag_exist == 1))
{
sprintf(buff, fileName.toStdString().c_str(), j);
filename1 = QString::fromStdString(buff);
if(!(srcdir.exists(filename1)))
{
std::cout << "DialogCopyTable::DirExistVideoFile srcdir=" << srcdir.path().toStdString() << " No exist " << filename1.toStdString() << std::endl;
tag_exist = 0;
}
j ++;
}
if(tag_exist == 1)
{
Dir_buf = srcdir;
return true;
}
QDir sdir = srcdir;
QFileInfoList fileinfolist = sdir.entryInfoList();
foreach(QFileInfo fileInfo, fileinfolist)
{
if(fileInfo.fileName() == "." || fileInfo.fileName() == "..")
continue;
if(fileInfo.isDir() && (i != 0))
{
if(i > 0)
i--;
if(DirExistVideoFile(fileInfo.filePath(), fileName, startid, stopid, i, Dir_buf))
{
return true;
}
}
}
return false;
}

bool DirCopyFile(const QDir &srcdir, const QDir &tardir, const QString srcfilename, const QString tarfilename, int tar_re)
{
if((srcdir == tardir) && (srcfilename == tarfilename))
return true;
if(!srcdir.exists())
return true;
if((srcfilename.isEmpty()) || (tarfilename.isEmpty()))
return false;
if(!tardir.exists())
{
if(!(tardir.mkpath(tardir.absolutePath())))
{
std::cout << "DirCopyFile() CreateDir=" << tardir.absolutePath().toStdString() << " Failed!" << std::endl;
return false;
}
}
if(!srcdir.exists(srcfilename))
{
return false;
}

QString filename1;
QString filename2;
filename1 = srcdir.path() + QDir::separator() + srcfilename;
filename2 = tardir.path() + QDir::separator() + tarfilename;
QFile tarfile(filename2);
if(tarfile.exists())
{
if(tar_re == 1)
{
if(!(tarfile.remove()))
{
std::cout << "DirCopyFile() CreateDir=" << filename2.toStdString() << " Failed!" << std::endl;
return false;
}
}
else
return true;
}
return(QFile::copy(filename1,filename2));
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值