2012-11-02 3 views
-1

Qt에서 원격 컴파일 시스템을 만들려고합니다. 내가 뭘 하려는지 클라이언트에서 C/C++ 소스를 얻고 서버에서 QProcess를 통해 로컬에서 사용할 수있는 GCC를 호출하고, exe 파일을 만든 다음 클라이언트에게 exe를 다시 전송하는 것입니다. 간단한 권리?Qt에서 네트워크를 통해 exe 파일 전송

exe ​​파일은 완벽하게 생성되지만 Qt는 파일을 전송하기 위해 배열로 읽을 수 없습니다.

내 코드는 다음과 같습니다 EXE 파일이 많이 존재

QByteArray arr; 
qDebug() << "To Client: exe"; 
QFile f("compiled.exe"); 
qDebug() << f.exists(); //output = false 
QString path = QDir::toNativeSeparators(QFileInfo(f).absoluteFilePath()); 
qDebug() << path; //perfect path is coming 
qDebug() << f.open(QIODevice::ReadOnly); //output = flase 
arr = f.readAll(); // size of arr is 0 
f1.close(); 
client->write(arr); //zero bytes written 

있지만, 나는 그런 출력을 얻고있다. 나는 같은 디렉토리에있는 다른 파일들과 함께 시도했지만 절대적으로 완벽하게 작동한다. exe 파일 만 작동하지 않습니다. MSVC v16.00.40219.10을 컴파일러로 사용하여 Windows에서 Qt 4.8.1 32 비트를 사용하고 있습니다.

미리 감사드립니다.

+1

'QIODevice :: errorString()'의 출력을 확인 했습니까? – adi

+2

파일이 사용 중이십니까? QProcess 인스턴스를 닫았습니까? – opc0de

+0

':: open' 또는':: fopen' C 라이브러리 함수로 파일을 열어보고 함수의 반환 값, 전역 변수'errno'와'strerror (errno)'에 의해 반환 된 C 문자열을 확인하십시오. 당신이 더 정확한 에러 메시지를 얻는 그런 식으로 ... 적어도 유닉스에서, 100 % Windows/mingw에 대해서는 확실하지 않다. – hyde

답변

1

QFile::open()을 사용할 때는 description of error codes이 필요하지 않습니다. Btw은

qDebug() << f.exists(); //output = false 

compiled.exe 프로세스 작업 디렉토리에없는, 아니 나 경로에 direcotry에 보인다. 완전한 경로를 제공하십시오 ...