[Qt-interest] QFileInfo doesn't work after QDir::setCurrent. Bug?

Scott Aron Bloom Scott.Bloom at onshorecs.com
Thu Jun 10 20:18:01 CEST 2010


That's because your QFileInfo is based on a relative path.

The moment you change the current directory, its looks in that current
directory.

If you want it to work, use an absolute path.. Or use a relative path,
have QFileInfo determine the absolute path, then create a new QFileInfo
off that abs path...

QFileInfo finfo( "test.txt" );
If ( finfo.exists() )
    Finfo = QFileInfo( finfo.absoluteFilePath() );

Im not at my dev box, so my syntax might be off a bit :)

This isn't a bug...

Note, if you used QFile, and opened it, it wouldn't be an issue at all.

Scott

-----Original Message-----
From: qt-interest-bounces at trolltech.com
[mailto:qt-interest-bounces at trolltech.com] On Behalf Of Nikos
Chantziaras
Sent: Thursday, June 10, 2010 11:11 AM
To: qt-interest at trolltech.com
Subject: [Qt-interest] QFileInfo doesn't work after QDir::setCurrent.
Bug?

Consider this:

   QFileInfo finfo("test.txt");
   qDebug() << "exists:" << finfo.exists();

(Make sure "test.txt" exists in the current directory.) This prints 
"true", as expected.

Now consider this:

   QFileInfo finfo("test.txt");
   QDir::setCurrent("/home");
   qDebug() << "exists:" << finfo.exists();

This prints "false".  finfo is not functional anymore and can't be used 
to get any valid information about "test.txt".

And to top it off:

   QFileInfo finfo("test.txt");
   qDebug() << "exists:" << finfo.exists();
   QDir::setCurrent("/home");
   qDebug() << "exists:" << finfo.exists();

This prints "true" 2 times, and finfo works and can be used normally. 
Seems that calling any method on finfo fixes this.

Have I found a bug in Qt, or is this normal?

Qt 4.6.3 and 4.7.0 beta1, both 64-bit on Linux.
_______________________________________________
Qt-interest mailing list
Qt-interest at trolltech.com
http://lists.trolltech.com/mailman/listinfo/qt-interest




More information about the Qt-interest-old mailing list