Qt 컴포지팅 및 비컴포지팅 파일 [심도 컴포지팅/광도 컴포지팅/교체기]
2735 단어 Qt
두루 다니면 귀속과 비귀속 두 종류로 나눌 수 있다.
귀속
귀속은 주로 4단계로 요약할 수 있다. ① QDir를 통해 대상 폴더에 접근하고 ② 필터에 필요한 파일 형식 ③ 필터된 파일 정보 목록 ④ 파일 정보 목록을 가져오고 파일 경로를 꺼내 귀속 함수를 호출한다.
실현 방법 1 (깊이 있게 훑어보고 코드가 간결하다)
void fileTraverse(QString path)
{
QDir dir(path);
if(!dir.exists())
return;
dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::Hidden); // 、 ,
dir.setSorting(QDir::DirsFirst); //
foreach(QFileInfo info,dir.entryInfoList())
{
if(info.isFile())
{
//do what you wanna do
}
else
{
//do what you wanna do
fileTraverse(info.filePath());
}
}
}
실현 방법 2 (깊이 훑어보기)
void fileTraverse(QString path)
{
QDir dir(path);
if(!dir.exists())
{
return;
}
dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::Hidden);
dir.setSorting(QDir::DirsFirst); //
QFileInfoList list = dir.entryInfoList();
for(int i=0; i
비귀속
반복 코드는 간결하지만 효율이 비교적 낮다.다음은 두 가지 비귀속 방법이다. 방법은 셋째, 대열을 이용하여 넓이를 두루 훑어보고 넷째, 교체기를 사용한다.
실현 방법 3 (광도 역력, 대기열)
void bfsFileTraverse(QString path)
{
QFileInfo currentInfo(path);
QDir dir(path);
if(!dir.exists())
return;
QQueue infoQueue; //
infoQueue.enqueue(currentInfo);
while(!infoQueue.isEmpty())
{
dir = infoQueue.head().filePath(); //
infoQueue.dequeue();
dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::Hidden); // 、 ,
dir.setSorting(QDir::DirsFirst); //
QFileInfoList list = dir.entryInfoList();
for(int i=0; i
실현 방법 4 (교체기)
void fileTraverse(QString path)
{
QStringList fileList;
QDir dir(path);
if(!dir.exists())
{
return;
}
QDirIterator dirIterator(path,QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::Hidden,QDirIterator::Subdirectories);
while(dirIterator.hasNext())
{
dirIterator.next();
QFileInfo fileInfo = dirIterator.fileInfo();
if(fileInfo.isFile())
{
qDebug()<
【참고문장】
Qt 스트리밍 폴더(entryInfoList 자체는 반환되지 않음)
Qt 폴더 스트리밍
Qt 파일 반복