2014-03-02 1 views
-1

이상한 문제가 있습니다.QT QDir :: entryList가 릴리스에서 작동하지 않습니다.

내 응용 프로그램이 잘 작동하지만 .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

+0

어떻게 행동하나요? – user2672165

+0

'cs.protocolDir'에 올바른 경로가 포함되어 있습니까? – fasked

+0

@ user2672165 파일을 찾지 못했습니다. 하나도 아닙니다. – mreithuber

답변

-1

Qt 작성자 또는 Visual Studio에서 응용 프로그램을 실행하는 동안 및 두 번 클릭하여 EXE 파일을 실행하는 동안 실행 경로가 다르기 때문일 수 있습니다. 절대 경로 QDir :: absolutePath()를 기록하고 cs.protocolDir에서 절대 경로를 사용해보십시오.

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의 경로가 상대 경로입니까? "in Qt"로 Qt Creator에서 직접 실행하는 것을 의미한다면, Qt Creator는 기본적으로 이진 위치 인 "working directory"를 설정하게됩니다. 경로가 이진에 상대적으로 계산되기 때문에 아마도이 경우에 작동합니다.

실행 파일을 실행하면 작업 디렉토리는 명령 행에서 실행하면 바이너리를 실행할 때의 디렉토리가됩니다. 또는 운영 체제가 선택한 다른 디렉토리.

이것이 문제가된다면 대신 절대 경로를 사용해야합니다.

0

타이밍/동기화가 중요합니다.

디버그 모드에있는 동안, 수집가, 전문가 및 다른 많은 일부 (에) 상당한 지연이있다 :

디버그 모드에서 작동 왜 설명 할 것이다, DIR은 entryList이 실행되는 순간에 준비되지 않은 참조 효율적인 디버깅을 가능하게 해주는 구조로 성능이 떨어집니다.

디렉토리가 동적 인 디렉토리 (네트워크, 플래시 드라이브, 가상 등) 인 경우 디렉토리가 운영 체제에서 완전히 빌드되어 액세스 준비가 완료 될 때까지 기다려야 할 수도 있습니다!

경로와 함께 QDir을 초기화하기 전에 잠자기를 쉽게 시도 할 수 있습니다. 수면 기능의 지연 시간을 변경하여 FS/SO의 필요한 시간을 이해하십시오.

관련 문제