暑假一直闷在家里搞高等数学,烦死了,上网有个同学说想要把一个
文件夹中的多种
格式文件分开处理,其实用CMD就可以了,本着实践的态度自己搞了个小软件。。。
文件复制
部分不必说,就是一个Qt文件复制API,如果需要就递归一下 ;关键在过滤器这里,就是要实现一次复制多个指定格式的文件,用Qt自带的过滤一次只能抓取一种格式,一次多种格式好像没法了 ;我的思路是定义一个
QString对象,接受例如 :jpg,png,txt 类型字符串的输入,然后用 split() 以逗号为分割符分割成
QStringList,然后在复制函数中每抓取一个文件便判断QStringList是否包含指定格式文件,如果 contains 则调用 QFile::copy
声明:qCopyDirectory() 出自 wangxinus ,我稍微修改了下。关键代码如下:- #include <QDir>
- #include <QFileInfoList> // 别忘了这两个哥们
- ........................
- QStringList filters;
- QString filters_t=ui->filters_lineEdit->text();
- if (filters_t.isEmpty())
- {
- QMessageBox::information(this,tr("过滤器"),tr("请给出过滤器参数,多个参数可用逗号隔开,如:jpg,png,gif"));
- return ;
- }else if (filters_t.contains("*"))
- {
- filters=QStringList(QString("*"));
- }else{
- filters=filters_t.split(","); //多参数
- }
- if(qCopyDirectory(from_Dir,to_Dir,filters,true))
- QMessageBox::information(this,tr("OK!"),tr("任务已成功完成!"));
- else
- QMessageBox::warning(this,tr("出错了"),tr("文件复制过程中出错,可能没有权限或者文件正在使用!"));
- .................
文件复制及过滤函数如下:- bool Widget::qCopyDirectory(const QDir& fromDir, const QDir& toDir, const QStringList& filters, bool bCoverIfFileExists)
- {
- QDir toDir_ = const_cast<QDir&>(toDir); // 转换常量toDir为普通值toDir_,因为后面将要移除目标目录中重名文件,词句等价于QDir toDir_=toDir;Qt好像自动就进行了转换工作...
- if(!toDir_.exists()) //如果目录不存在
- {
- if(!toDir_.mkdir(toDir_.absolutePath())) //如果创建目录失败
- return false;
- }
- QFileInfoList fileInfoList = fromDir.entryInfoList(); //...
- foreach(QFileInfo fileInfo, fileInfoList)
- {
- if(fileInfo.fileName() == "." || fileInfo.fileName() == "..")
- continue;
- if(fileInfo.isDir()) //拷贝子目录
- {
- if(!qCopyDirectory(fileInfo.filePath(), toDir_.filePath(fileInfo.fileName()),filters,bCoverIfFileExists)) //递归调用拷贝
- return false;
- }
- else //拷贝子文件
- {
- if(bCoverIfFileExists && toDir_.exists(fileInfo.fileName()))
- {
- toDir_.remove(fileInfo.fileName());
- }
- if(filters.contains("*"))
- {
- if(!QFile::copy(fileInfo.filePath(), toDir_.filePath(fileInfo.fileName()))) //文件复制API
- {
- return false;
- }
- }
- else if(filters.contains(fileInfo.completeSuffix())) //如果包含指定扩展名的文件,则毫不客气——带走!
- {
- if(!QFile::copy(fileInfo.filePath(), toDir_.filePath(fileInfo.fileName()))) //文件复制API
- {
- return false;
- }
- }
- }
- }
- return true;
- }
bye拉,四个月后再见,这些日子每天都是狰狞,坚持,加油 ......