我正在尝试使用QFtp将.avi文件上传到FTP服务器:
void MyFTP::recordingDone(QString &fileName){
remainingFiles.push_back(new QString(fileName));
commands[qftp.connectToHost(globalProperties.ftpServer)] = "connect to host";
commands[qftp.login(globalProperties.ftpUsername,globalProperties.ftpPassword)] = "login";
commands[qftp.cd("myapp")] = "cd myapp";
commands[qftp.cd("Videos")] = "cd videos";
QDir().cd(globalProperties.videoStorageLocation);
qDebug()<<"Opening "<<fileName<<endl;
if(QFile::exists(fileName)){
qDebug()<<"File exists"<<endl;
}
else{
qDebug()<<"File does not exist"<<endl;
}
QFile file(fileName);
qDebug()<<"putting"<<endl;
qftp.put(&file,fileName);
qDebug()<<"Closing ftp"<<endl;
qftp.close();
}
我已连接到命令完成信号并使用插槽调试输出信息:
void TrusionFTP::ftpCommandDone(int id, bool error){
qDebug()<<"command: "<<commands[id]<<": "<<error;
if(error){
qDebug()<<qftp.errorString()<<endl;
if (qftp.hasPendingCommands()){
qDebug()<<"Pending commands"<<endl;
}
}
}
这是崩溃前的输出:
Opening "2012-Mar-06-12-19-57.avi"
File exists
putting
Closing ftp
command: "connect to host" : false
command: "login" : false
command: "cd trusion" : false
command: "cd videos" : false
如果我不关闭ftp连接,也会发生崩溃。该文件永远不会进入服务器。
答案 0 :(得分:5)
QFile file(fileName);
ids.push_back(qftp.put(&file,fileName));
file
驻留在堆栈上。成员函数file
返回后,void MyFTP::recordingDone(QString &fileName)
的生命周期结束。但是qftp
仍然提到它。当您尝试访问不再存在的file
时,这可能会导致崩溃。而是在堆上分配file
。