QT QDir :: entryList无法在发布中使用

时间:2014-03-02 13:36:06

标签: c++ qt qdir

我有一个奇怪的问题。

在QT中,我的应用程序工作正常,但是当我运行.exe文件时,方法QDir :: entryList无效......我不知道为什么。设置路径等。

QDir pdir(cs.protocolDir);
QString log;

log.append(QString("[LPR] Trying to fetch protcol files\n"));

QStringList filter("*.txt");
Message locMSG;

QStringList flist = pdir.entryList(QStringList(filter),
                                   QDir::Files | QDir::NoSymLinks);


foreach (QString str, flist) {
    QString filename = QString("%1%2").arg(cs.protocolDir).arg(str);
    log.append(QString("[LPR]Filename: %1\n").arg(filename));
    QFile file(filename);

    //and so on...

我希望有人可以帮我解决这个问题。 THX

3 个答案:

答案 0 :(得分:1)

如果找不到构建QDir的路径QDir::entryList()静默失败并返回一个空列表。尝试插入:

if (!pdir.exists())
{
    log.append(QString("[LPR] Path %1 does not exist - PWD is %2").arg(cs.protocolDir).arg(QDir::currentPath()));
}

...在第一个日志语句之后,查看是否找到了目录。

cs.protocolDir中的路径是否是相对路径?如果“在Qt”中你的意思是直接从Qt Creator运行它,那么Qt Creator将设置一个“工作目录”,默认情况下是二进制文件的位置。也许它适用于那种情况,因为路径是相对于二进制计算的。

运行可执行文件时,如果从命令行运行二进制文件,则工作目录将是您运行二进制文件时所在的目录。或者您的操作系统选择的某个目录。

如果这是问题所以你需要使用绝对路径。

答案 1 :(得分:0)

关于计时/同步的全部内容!

在执行entryList时,引用的DIR尚未就绪,我将解释为什么在调试模式下工作:

在调试模式下,收集器,观察者和许多其他结构有一些(显着)延迟,以便进行有效调试,从而降低性能。

因此,如果目录是动态目录(网络,闪存驱动器,虚拟等等),可能需要等待一段时间,直到操作系统完全构建目录并准备好进行访问!

您可以轻松尝试在使用路径初始化QDir之前进行睡眠。更改睡眠功能的延迟量,以了解FS / SO的必要时间;

答案 2 :(得分:-1)

这可能是因为当你从Qt creator或visual studio以调试模式运行应用程序时执行路径不同,并且当你通过双击运行exe文件时。尝试记录绝对路径QDir :: absolutePath(),并尝试在cs.protocolDir中使用绝对路径。