lsropia
12th March 2011, 09:16
Below given is my part of code that used to work some (long) time back. When I need this code, I find it works no more. The compilation is clean, bur when run gives the error as:
[lx@localhost listDir]$ ./listDir /home/lux/Downloads/xfrd/raw /home/lx/Downloads/xfrd/rawConv/
04. qStrDir: /home/lx/Downloads/xfrd/raw, qFileInfoDirInfo->fileName: raw01
05. Before QFileInfoListIterator filesIterator( *filesList ): 0
Segmentation fault (core dumped)
The problem seems to be inconsistency by way of new version of the Qt. Please help to make this code work.
QDir qDirFindLargest, qDirLargestFile, qDirFilesChange;
QFile qf;
QString qStrDir, qStrDir2, qStrTemp; // a.argv()[i] == argv[i]
qStrTemp = a.argv()[0];
qStrDir = a.argv()[1];
qStrDir2 = a.argv()[2];
//cout << "Total agrc: " << argc << ", Directories 0: " << qStrTemp << ", 1: " << qStrDir << ", 2: " << qStrDir2 << endl;
qDirFindLargest.setPath ( qStrDir );
qDirFindLargest.setFilter( QDir::Dirs ); // sets only the directory: shows the directories only
qDirFindLargest.setSorting( QDir::Name | QDir::Reversed );
const QFileInfoList *qFileInfoDirList = qDirFindLargest.entryInfoList();
QFileInfoListIterator qFileInfoListIteratorDir( *qFileInfoDirList );
QFileInfo *qFileInfoDirInfo;
QString qFileName;
int fileNumber = 0;
while ( ( qFileInfoDirInfo = qFileInfoListIteratorDir.current() ) != 0 ) {
if (qFileInfoDirInfo->fileName() == "." ) { // first item in the directory: . (let pass)
++qFileInfoListIteratorDir;
}
else if (qFileInfoDirInfo->fileName() == ".." ) { // first item in the directory: .. (let pass)
++qFileInfoListIteratorDir;
}
else {
qDirLargestFile.setPath ( qStrDir + qFileInfoDirInfo->fileName() );
qDirLargestFile.setFilter( QDir::Files ); // qFiles to only show the files
qDirLargestFile.setSorting( QDir::Name | QDir::Reversed ); // sorting the files in the directory in reverse order: to find the last file alphabetically
cout << "04. qStrDir: " << qStrDir << ", qFileInfoDirInfo->fileName: " << qFileInfoDirInfo->fileName() << endl;
const QFileInfoList *filesList = qDirLargestFile.entryInfoList();
cout << "05. Before QFileInfoListIterator filesIterator( *filesList );" << endl;
QFileInfoListIterator filesIterator( *filesList );
cout << "06. After QFileInfoListIterator filesIterator( *filesList );" << endl;
QFileInfo *files;
cout << "07. After QFileInfo *files;" << endl;
files = filesIterator.current();
cout << "07A. After files = filesIterator.current(), files = filesIterator.current(): " << filesIterator.current() << endl;
cout << "08. After files = filesIterator.current(), files->fileName: " << files->fileName() << endl;
... }
[lx@localhost listDir]$ ./listDir /home/lux/Downloads/xfrd/raw /home/lx/Downloads/xfrd/rawConv/
04. qStrDir: /home/lx/Downloads/xfrd/raw, qFileInfoDirInfo->fileName: raw01
05. Before QFileInfoListIterator filesIterator( *filesList ): 0
Segmentation fault (core dumped)
The problem seems to be inconsistency by way of new version of the Qt. Please help to make this code work.
QDir qDirFindLargest, qDirLargestFile, qDirFilesChange;
QFile qf;
QString qStrDir, qStrDir2, qStrTemp; // a.argv()[i] == argv[i]
qStrTemp = a.argv()[0];
qStrDir = a.argv()[1];
qStrDir2 = a.argv()[2];
//cout << "Total agrc: " << argc << ", Directories 0: " << qStrTemp << ", 1: " << qStrDir << ", 2: " << qStrDir2 << endl;
qDirFindLargest.setPath ( qStrDir );
qDirFindLargest.setFilter( QDir::Dirs ); // sets only the directory: shows the directories only
qDirFindLargest.setSorting( QDir::Name | QDir::Reversed );
const QFileInfoList *qFileInfoDirList = qDirFindLargest.entryInfoList();
QFileInfoListIterator qFileInfoListIteratorDir( *qFileInfoDirList );
QFileInfo *qFileInfoDirInfo;
QString qFileName;
int fileNumber = 0;
while ( ( qFileInfoDirInfo = qFileInfoListIteratorDir.current() ) != 0 ) {
if (qFileInfoDirInfo->fileName() == "." ) { // first item in the directory: . (let pass)
++qFileInfoListIteratorDir;
}
else if (qFileInfoDirInfo->fileName() == ".." ) { // first item in the directory: .. (let pass)
++qFileInfoListIteratorDir;
}
else {
qDirLargestFile.setPath ( qStrDir + qFileInfoDirInfo->fileName() );
qDirLargestFile.setFilter( QDir::Files ); // qFiles to only show the files
qDirLargestFile.setSorting( QDir::Name | QDir::Reversed ); // sorting the files in the directory in reverse order: to find the last file alphabetically
cout << "04. qStrDir: " << qStrDir << ", qFileInfoDirInfo->fileName: " << qFileInfoDirInfo->fileName() << endl;
const QFileInfoList *filesList = qDirLargestFile.entryInfoList();
cout << "05. Before QFileInfoListIterator filesIterator( *filesList );" << endl;
QFileInfoListIterator filesIterator( *filesList );
cout << "06. After QFileInfoListIterator filesIterator( *filesList );" << endl;
QFileInfo *files;
cout << "07. After QFileInfo *files;" << endl;
files = filesIterator.current();
cout << "07A. After files = filesIterator.current(), files = filesIterator.current(): " << filesIterator.current() << endl;
cout << "08. After files = filesIterator.current(), files->fileName: " << files->fileName() << endl;
... }