doitux
02-03-2006, 22:53
Hallo
Ich habe ein Problem mit der folgenden Funktion:
void qupilmainwindowimpl::refresh_frontList()
{
//search for pupils
QStringList subdirsTemp;
subdirsTemp = progDir->entryList();
subdirsTemp.remove(".");
subdirsTemp.remove("..");
QDir subDir;
QFile personaldataFile;
QString line;
QString completeName;
listView1->clear();
for ( QStringList::Iterator it = subdirsTemp.begin(); it != subdirsTemp.end(); ++it )
{
subDir.setPath(QDir::home().absPath()+"/.qupil/"+*it);
personaldataFile.setName(subDir.absPath()+"/personaldata.txt");
QListViewItem* item = new QListViewItem(listView1);
personaldataFile.open( IO_ReadOnly );
QTextStream readStream( &personaldataFile );
while ( !readStream.atEnd() ) {
line = readStream.readLine();
if ( line.startsWith("firstname")) {
completeName = line.section( "=", 1, 1 );
}
if ( line.startsWith("lastname")) {
completeName = line.section( "=", 1, 1 )+", "+completeName;
item->setText(0, completeName);
}
if ( line.startsWith("lessonday")) {
item->setText(1, line.section( "=", 1, 1 ));
}
if ( line.startsWith("lessontime")) {
item->setText(2, line.section( "=", 1, 1 ));
}
}
personaldataFile.close();
}
listView1->setAllColumnsShowFocus(TRUE);
}
Die Liste soll am Ende eine Auflistung der Schüler mit Name und Unterrichtszeit enthalten. Für jeden Schüler gibt es ein Unterverzeichnis mit dessen Namen. In diesem Unterverzeichnis befindet sich die date personaldata.txt aus der die Werte für die Liste gestreamt werden.
Bei Start des Programms wird die Funktion standardmäßig einmal ausgeführt. Das klappt auch wunderbar.
Wenn ich jedoch zuvor einen bestimmten Schüler (mit Unterverzeichnis) mit der Funktion del_pupil() gelöscht habe und am Ende der Funktion refresh_frontList() ausführen will bekomme ich immer:
QFile::getch: File not open
QFile::atEnd: File is not open
QFile::getch: File not open
QFile::atEnd: File is not open
QFile::getch: File not open
QFile::atEnd: File is not open
und das Programm hängt.
Wenn ich das Programm dann wieder neu starte wird die Funktion problemlos ausgeführt und der Schüler erscheint nicht mehr in der Liste.
Kann mir jemand sagen warum die Funktion refresh_frontList() am Ende von del_pupil() fehlschlägt?
Gruß
doitux
Ich habe ein Problem mit der folgenden Funktion:
void qupilmainwindowimpl::refresh_frontList()
{
//search for pupils
QStringList subdirsTemp;
subdirsTemp = progDir->entryList();
subdirsTemp.remove(".");
subdirsTemp.remove("..");
QDir subDir;
QFile personaldataFile;
QString line;
QString completeName;
listView1->clear();
for ( QStringList::Iterator it = subdirsTemp.begin(); it != subdirsTemp.end(); ++it )
{
subDir.setPath(QDir::home().absPath()+"/.qupil/"+*it);
personaldataFile.setName(subDir.absPath()+"/personaldata.txt");
QListViewItem* item = new QListViewItem(listView1);
personaldataFile.open( IO_ReadOnly );
QTextStream readStream( &personaldataFile );
while ( !readStream.atEnd() ) {
line = readStream.readLine();
if ( line.startsWith("firstname")) {
completeName = line.section( "=", 1, 1 );
}
if ( line.startsWith("lastname")) {
completeName = line.section( "=", 1, 1 )+", "+completeName;
item->setText(0, completeName);
}
if ( line.startsWith("lessonday")) {
item->setText(1, line.section( "=", 1, 1 ));
}
if ( line.startsWith("lessontime")) {
item->setText(2, line.section( "=", 1, 1 ));
}
}
personaldataFile.close();
}
listView1->setAllColumnsShowFocus(TRUE);
}
Die Liste soll am Ende eine Auflistung der Schüler mit Name und Unterrichtszeit enthalten. Für jeden Schüler gibt es ein Unterverzeichnis mit dessen Namen. In diesem Unterverzeichnis befindet sich die date personaldata.txt aus der die Werte für die Liste gestreamt werden.
Bei Start des Programms wird die Funktion standardmäßig einmal ausgeführt. Das klappt auch wunderbar.
Wenn ich jedoch zuvor einen bestimmten Schüler (mit Unterverzeichnis) mit der Funktion del_pupil() gelöscht habe und am Ende der Funktion refresh_frontList() ausführen will bekomme ich immer:
QFile::getch: File not open
QFile::atEnd: File is not open
QFile::getch: File not open
QFile::atEnd: File is not open
QFile::getch: File not open
QFile::atEnd: File is not open
und das Programm hängt.
Wenn ich das Programm dann wieder neu starte wird die Funktion problemlos ausgeführt und der Schüler erscheint nicht mehr in der Liste.
Kann mir jemand sagen warum die Funktion refresh_frontList() am Ende von del_pupil() fehlschlägt?
Gruß
doitux