PDA

View Full Version : how to recursive a directory in qt?



deweyjew
6th November 2006, 11:21
hi all:
how to recursive a directory in qt?
i use QFileInfoListIterator, but it failed.

can anyone help me? thanks!

Elgerton
6th November 2006, 12:33
Something like this ?:



void RecurseDirectory(const QString& sDir)
{
QDir dir(sDir);
QFileInfoList list = dir.entryInfoList();
for (int iList=0;iList<list.count();iList++)
{
QFileInfo info = list[iList];

QString sFilePath = info.filePath();
if (info.isDir())
{
// recursive
if (info.fileName()!=".." && info.fileName()!=".")
{
RecurseDirectory(sFilePath);
}
}
else
{
// Do something with the file here
}
}
}

patrik08
6th November 2006, 19:16
hi all:
how to recursive a directory in qt?
i use QFileInfoListIterator, but it failed.

can anyone help me? thanks!


Here You can recursive remove file & dir....



void DownDir_RM(const QString d)
{
QDir dir(d);
///////SqlLog("order to delete dir:"+d+" ");
if (dir.exists())
{
const QFileInfoList list = dir.entryInfoList();
QFileInfo fi;
for (int l = 0; l < list.size(); l++)
{
fi = list.at(l);
if (fi.isDir() && fi.fileName() != "." && fi.fileName() != "..")
DownDir_RM(fi.absoluteFilePath());
else if (fi.isFile())
{
QFile f( fi.absoluteFilePath() );
bool ret = f.remove();
if (!ret)
/////////SqlLog("Can't remove: " + fi.absoluteFilePath() + " (write-protect?)");
}

}
//////////SqlLog("Remove: " + d + " ");
dir.rmdir(d);

}
}

deweyjew
7th November 2006, 01:38
i use qt/e2.3.10, my code is below, but it doesn't work, why?


int addFileFromDir(const QString& d)
{
QDir dir( d );
dir.setMatchAllDirs( true );
dir.setSorting(QDir::DirsFirst | QDir::IgnoreCase);
if( !dir.exists() )
{
return -1;
}
QString file;
const QFileInfoList * list = dir.entryInfoList();
if( list )
{
QFileInfoListIterator it(*list);
QFileInfo *fi;
while ( (fi = it.current()) != 0 )
{
qDebug( fi->absFilePath() );
if ( !fi->isDir() )
{
//do something
}
else if ( fi->isDir() && (fi->fileName()!=".") && (fi->fileName()!="..") )
{
addFileFromDir( fi->absFilePath() );
}
++it;
}
}
return 0;
}

deweyjew
7th November 2006, 02:39
i know why, there is another bug in other code:(
thank you all the same!

Elgerton
7th November 2006, 09:06
void DownDir_RM(const QString d)
{
....
}



And what is the difference between your and my example?