QT QDir :: entryList не работает в релизе

У меня странная проблема.

В 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...

Я надеюсь, что кто-то может помочь мне с этой проблемой. Спасибо

-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

Другие решения

Это все о синхронизации / синхронизации!

Указанный DIR не готов в момент запуска entryList, я объясню, почему работает в режиме отладки:

В режиме отладки имеется некоторая (не) значительная задержка от сборщиков, наблюдателей и многих других структур, чтобы обеспечить эффективную отладку, которая снижает производительность.

Таким образом, если каталог является динамическим (сетевой, флэш-накопители, виртуальные и т. Д.), Может потребоваться некоторое время подождать, пока каталог будет полностью создан операционной системой и готов к доступу!

Вы можете легко попытаться поставить сон перед тем, как инициализировать QDir с путем. Измените величину задержки в режиме сна, чтобы понять необходимое время вашего FS / SO;

0

Это может произойти из-за того, что пути выполнения отличаются, когда вы запускаете приложение в режиме отладки из Qt creator или visual studio, а также когда вы запускаете exe-файл двойным щелчком мыши. Попробуйте зарегистрировать абсолютный путь QDir :: absolutePath () и попробуйте использовать абсолютный путь в cs.protocolDir.

-1
По вопросам рекламы [email protected]