qt 怎么使用多线程遍历文件夹

qt 怎么使用多线程遍历文件夹,第1张

一、Qt遍历文件夹下一层的文件:

方式1:

void ImageTree::addFolderImages(QString path)

{

//判断路径是否存在

QDir dir(path)

if(!dir.exists())

{

return

}

dir.setFilter(QDir::Files | QDir::NoSymLinks)

QFileInfoList list = dir.entryInfoList()

int file_count = list.count()

if(file_count <= 0)

{

return

}

QStringList string_list

for(int i=0i

{

QFileInfo file_info = list.at(i)

QString suffix = file_info.suffix()

if(QString::compare(suffix, QString("png"), Qt::CaseInsensitive) == 0)

{

QString absolute_file_path = file_info.absoluteFilePath()

string_list.append(absolute_file_path)

}

}

}

分析:遍历文件的下一层,对于系统而言包括:文件夹、文件、快捷方式,使用setFilter即可过滤。通过entryInfoList则可以获念携烂取过滤后所得到的文件夹下的文件信息列表,遍历文件通过 *** 作QFileInfo可隐键得到所需的文件详细信息仔漏(大小、类型、后缀等)。

#include <stdio.h> #include <dos.h> #include <errno.h> #include <io.h> #include <dirent.h> #include <dir.h> #include <string.h> #include <sys\stat.h> #include "pm03a.h" void main(int argc,char* argv[]) { //printf("Number %d\n"做陆,ConfirmFileAttrib(argv[1])) GetDirectory(argv[1]) printf("\nSearch Over.\n") } //------------------------------------------------------------------ //pm03a.h //------------------------------------------------------------------void GetDirectory(char *DirectoryName) int ConfirmFileAttrib(char* filename) char *GetCurrentPath() char* GetFullFileName(char *filename) char *WillDeleteFile(char *FileName) //-------------------------------------------------------- //--------------- 获得文件属性 --------------------------- //-------------------------------------------------------- int ConfirmFileAttrib(char* filename) { int temp=0 int attrib=(_rtl_chmod(filename,0)) if(attrib==-1) { switch(errno) { case ENOENT: //printf("%s Path or file not found.\n",filename) temp=0 break case EACCES: /链茄/printf("Permission denied.\n") temp=-1 break default: //printf("Error number: %d", errno) temp=-2 break } } else { if(attrib &FA_RDONLY) { temp=1 //printf("%s is read-only.\n", filename) } if(attrib &FA_HIDDEN) { temp=2 //printf("%s is hidden.\纯唤顷n", filename) } if(attrib &FA_SYSTEM) { temp=3 //printf("%s is a system file.\n", filename) } if(attrib &FA_DIREC) { temp=4 //printf("%s is a directory.\n", filename) } if (attrib &FA_ARCH) { temp=5 //printf("%s is an archive file.\n", filename) } } return temp } //-------------------------------------------------------- //-------------------------------------------------------- //--------------- 获取目录流 ----------------------------- //-------------------------------------------------------- void GetDirectory(char *DirectoryName) { DIR* Directory_Point struct dirent *entry bool DirControl if((Directory_Point=opendir(DirectoryName))==NULL) { printf("Error opening directory!\n") return } else { if(strcmp(DirectoryName,"..")==0) { return } if(strcmp(DirectoryName,".")==0) DirControl=true else DirControl=false chdir(DirectoryName) //char *filename=DirectoryName //int k=creat(strcat(filename,".txt"),S_IWRITE) while(bool(entry=readdir(Directory_Point))) { if(ConfirmFileAttrib(entry->d_name)==5) // 确定为文件属性 { // 文件过滤 WillDeleteFile(entry->d_name) } if(ConfirmFileAttrib(entry->d_name)==4) // 确定为目录属性 { if(strcmpi(entry->d_name,"..")==0||strcmpi(entry->d_name,".")==0) { continue } else { //printf("\n%s is direct\n\n",entry->d_name) GetDirectory(entry->d_name) } } } if(!DirControl==true) chdir("..") closedir(Directory_Point) } } //-------------------------------------------------------- //-------------------------------------------------------- //---------- 判断文件类型以备过滤 ------------------------ //-------------------------------------------------------- char* GetFullFileName(char *filename) { char *FullFilename=GetCurrentPath() if(strlen(FullFilename)<=3) { strcat(FullFilename,filename) } else { strcat(FullFilename,"\\") strcat(FullFilename,filename) } return FullFilename } char *GetCurrentPath() { char path[1024]="" strcpy(path, "X:\\")/* fill string with form of response: X:\ */ path[0] = 'A' + getdisk()/* replace X with current drive letter */ getcurdir(0, path+3)/* fill rest of string with current directory */ return path } char *WillDeleteFile(char *FileName) { int len for(len=strlen(FileName)len>=0len--) { if(FileName[len]=='.') break } char* Retname int s=-1 for(int i=leni<=strlen(FileName)i++) { Retname[s+=1]=FileName[i] } int i=-1 if(Retname[1]=='~')i=0 if(strcmpi(Retname,".bak")==0)i=0 if(strcmpi(Retname,".obj")==0)i=0 if(strcmpi(Retname,".tds")==0)i=0 if(strcmpi(Retname,".dcu")==0)i=0 if(strcmpi(Retname,".tmp")==0)i=0 if(strcmpi(Retname,".ilk")==0)i=0 if(strcmpi(Retname,".pch")==0)i=0 if(strcmpi(Retname,".pdb")==0)i=0 if(strcmpi(Retname,".tlb")==0)i=0 if(strcmpi(Retname,".idb")==0)i=0 if(strcmpi(Retname,".pdb")==0)i=0 if(strcmpi(Retname,".r$p")==0)i=0 if(strcmpi(Retname,".OBR")==0)i=0 if(strcmpi(Retname,".mbt")==0)i=0 if(strcmpi(Retname,".mrt")==0)i=0 if(strcmpi(Retname,".csm")==0)i=0 if(i==0) { remove(GetFullFileName(FileName)) printf("%s delete\n",GetFullFileName(FileName)) } return Retname }

@echo off

for /r 配燃d:\123 %%i in 培敏虚(*) do (

 拿租  if "%%~xi" neq ".bak" echo %%i

)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12260017.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存