- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
QT 版本 5.4。
我正在尝试使用 QFtp 从特定目录下载所有文件。
有时信号 commandFinished(int, bool) 发送得太早。
我使用信号 dataTransferProgress(qint64, qint64) 来检查我的下载进度。
当它工作时,我得到如下输出:
Download 1
dataTransferProgress 0/150
dataTransferProgress 150/150
commandFinished
Dowload 2
dataTransferProgress 0/250
dataTransferProgress 250/250
commandFinished
我的文件没问题
当它不起作用时我有:
Download 1
dataTransferProgress 0/150
commandFinished
Dowload 2
150/150
0/250
commandFinished
文件 1 是空的。文件 2 包含文件 1 的数据。
我的 FTP 对象
class ActionFTP : public QFtp
{
Q_OBJECT
public:
ParamConnexion parametres;
QString FTP_export="exportX3_OFT/";
QString FTP_import="exportOFT_X3/";
QString FTP_historique="historique/";
QString OFT_export;
QString OFT_import;
QString OFT_historique;
QString ficConfig;
QFile *file;
QSettings *settings;
ActionFTP(QObject *parent = 0, QString fichierConfig = "config.ini", int detail = 0);
~ActionFTP();
bool recupFichier_X3_OFT(const QString&); // Function to download the File
bool ftpestdeconnecte(); // Check if my ftp is deconnected
void connecter(); // Connect me to the FTP
void deconnecter(); // Disconnect me from the FTP
void ContenuRepertoireFTP(); // List all the files in the FTP directory
bool getCommandEnCours(){return commandEnCours;} // Check if a command is already running
QList<QUrlInfo> getListePrete(){return listeFichiers;} // Return if the list of the
bool commandEnCours;
private :
int idEnCours;
QList<QUrlInfo> listeFichiers;
private slots:
void slot_append(QString info); // Get some informations
void ftpCommandFinished(int id, bool err);
void ftpCommandStarted(int id);
void remplirList(QUrlInfo);
void ftpdatatransferprogress(qint64, qint64);
signals :
void signal_connexionFaite(bool); // Send when I'm connected
void signal_deconnexionFaite(bool); // Send when I'm disconnected
void signal_append(QString infos); // Send some informations
void signal_listePrete(bool); // List ready
void fintransfertfichierrecup(); // When the get command is finished.
};
#endif // ACTIONFTP_H
.cpp
// I use a QSettings to get the different Path and the FTP Username/Login/Port/Host/TransferMode
ActionFTP::ActionFTP(QObject *parent, QString fichierConfig, int detail ) : QFtp(parent)
{
settings = new QSettings(fichierConfig, QSettings::IniFormat);
OFT_export=settings->value("Echange/DossierOFT").toString();
OFT_import=settings->value("Echange/DossierX3").toString();
OFT_historique=settings->value("Echange/DossierHistorique").toString();
connect(this, SIGNAL(signal_append(QString)),this,SLOT(slot_append(QString)));
connect(this, SIGNAL(commandFinished(int, bool)),this, SLOT(ftpCommandFinished(int, bool)));
connect(this,SIGNAL(commandStarted(int)), this, SLOT(ftpCommandStarted(int)));
connect(this, SIGNAL(listInfo(QUrlInfo)), this, SLOT(remplirList(QUrlInfo)));
connect(this, SIGNAL(dataTransferProgress(qint64,qint64)), this, SLOT(ftpdatatransferprogress(qint64, qint64)));
ficConfig=fichierConfig;
majParametres();
}
void ActionFTP::ftpdatatransferprogress(qint64 un, qint64 deux){
qDebug()<<un<<deux;
}
ActionFTP::~ActionFTP()
{
}
bool ActionFTP::recupFichier_X3_OFT(const QString &fichier){
if(commandEnCours){ // A command is already running
QString infos = "Une commande est déjà en cours.";
emit signal_append(infos);
}
else{
file = new QFile(OFT_import+fichier);
if(file->exists())file->remove();
QString infos = "Demande de r�cup�ration du fichier " + FTP_export+fichier;
emit signal_append(infos);
qDebug()<<"return de file->open "<<file->open(QIODevice::ReadWrite); // Always return TRUE
get(FTP_export+fichier, file, Binary); // Get command
}
return true;
}
void ActionFTP::slot_append(QString info){
qDebug()<<info;
}
bool ActionFTP::ftpestdeconnecte()
{
if (state()==QFtp::Unconnected)
return true;
return false;
}
void ActionFTP::connecter() {
setTransferMode((QFtp::TransferMode)parametres.TransfertMode);
if(!commandEnCours)
connectToHost(parametres.Hostname, parametres.Port);
else{
QString infos = "Une commande est déjà en cours.";
emit signal_append(infos);
}
}
void ActionFTP::deconnecter() {
if(commandEnCours){
QString infos = "Une commande est déjà en cours.";
emit signal_append(infos);
}
else{
close();
}
}
void ActionFTP::remplirList(QUrlInfo t){
listeFichiers.push_back(t);
}
void ActionFTP::ContenuRepertoireFTP(){ //Ask the list of files name in the directory
if(commandEnCours){
QString infos = "Une commande est déjà en cours.";
emit signal_append(infos);
}
else{
listeFichiers.clear();
list(FTP_export);
}
}
void ActionFTP::ftpCommandStarted(int id){
idEnCours = id;
commandEnCours=true;
qDebug()<<"dans commandStarted "<<id;
}
void ActionFTP::ftpCommandFinished(int id, bool err) {
qDebug()<<"dans ftpCommandFinished"<<id<<err;
QString infos;
if(err) {
infos = QString(" Erreur lors de la commande %i de type %i").arg(id, currentCommand());
erreurFTP(infos);
}
else {
infos += " OK";
}
emit signal_append(infos);
if(idEnCours==id){
QString infos;
switch(currentCommand()) {
case QFtp::None :
break;
case QFtp::SetTransferMode :
break;
case QFtp::SetProxy :
break;
case QFtp::ConnectToHost :
if(!err)
login(parametres.UserName, parametres.Password);
else
emit signal_connexionFaite(err);
break;
case QFtp::Login :
commandEnCours = false;
emit signal_connexionFaite(err);
break;
case QFtp::Close :
commandEnCours = false; // Signifier qu'il n'y a plus de transfert en cours
emit signal_deconnexionFaite(err);
break;
case QFtp::List :
commandEnCours=false;
emit signal_listePrete(err);
break;
case QFtp::Cd :
break;
case QFtp::Get :
file->close();
file = 0;
commandEnCours = false; // Signifier qu'il n'y a plus de transfert en cours
emit fintransfertfichierrecup();
qDebug()<<"signal get emit";
break;
case QFtp::Put :
commandEnCours = false; // Signifier qu'il n'y a plus de transfert en cours
emit fintransfertfichierenvoi();
break;
case QFtp::Remove :
commandEnCours = false;
emit fintransfertfichiersuppr();
break;
case QFtp::Mkdir :
break;
case QFtp::Rmdir :
break;
case QFtp::Rename :
break;
case QFtp::RawCommand :
break;
default :
infos = "Commande inconnue !!";
}
idEnCours = 0;
}
}
我的对象调用我的FTP对象
class TacheEchanges : public QTimer
{
Q_OBJECT
public:
explicit TacheEchanges(QObject *parent = 0);
signals:
public slots:
private slots:
virtual void slot_check();
protected:
private:
ActionFTP *ftp; // My FTP object
QList<QUrlInfo> listDownload; // List of the files name
int indiceDownload; // Iterator
private slots:
void continuerDownload(); // When one file is downloaded
void connexionFaite(bool); // When I am connected to the FTP
void listePrete(bool); // When my command list is done
};
#endif // TACHEECHANGES_H
.cpp
TacheEchanges::TacheEchanges(GestionBdD_Hizkia* bdd, QObject *parent)
: QTimer(parent)
{
settings =new QSettings(FICHIERCONFIG, QSettings::IniFormat);
try{
path_fichiersreference="";
path_poursage="";
path_historique="";
jobs = QList<Job>();
ftp = new ActionFTP(this, FICHIERCONFIG);
connect(this, SIGNAL(timeout()), this, SLOT(slot_check()));
connect(ftp,SIGNAL(fintransfertfichierenvoi()),this,SLOT(continuerUpload()));
connect(ftp, SIGNAL(signal_connexionFaite(bool)), this, SLOT(connexionFaite(bool)));
connect(ftp, SIGNAL(signal_listePrete(bool)), this, SLOT(listePrete(bool)));
//Differente path
path_fichiersreference =settings->value("Echange/DossierX3").toString();
path_historique =settings->value("Echange/DossierHistorique").toString();
path_poursage=settings->value("Echange/DossierOFT").toString();
indiceDownload=0;
}
catch(ErreurGeneriqueException &e) {
desc.message = "TacheEchanges\n"+ e.what();
desc.niveau = NIVEAU_CRITIQUE;
InterfaceBdD::historiser(desc);
qDebug() << desc.message;
}
catch(...) {
// QDebug() << "TacheEchanges\n" << e.get_message();
desc.message = "TacheEchanges ERREUR INCONNUE";
desc.niveau = NIVEAU_CRITIQUE;
InterfaceBdD::historiser(desc);
qDebug() << desc.message;
}
}
// If i am connected, i try to get the list of files name
void TacheEchanges::connexionFaite(bool err){
if(err)
throw new ErreurGeneriqueException("Impossible de se connecter");
else
ftp->ContenuRepertoireFTP();
}
void TacheEchanges::slot_check()
{
ftp->connecter();
}
// I take the list and start the download
void TacheEchanges::listePrete(bool err){
if(!err){
listDownload = ftp->getListePrete();
continuerDownload();
}
else{
throw new ErreurBasiqueException("Un problème est survenu lors de la récupération de la liste des fichiers présents sur le FTP.");
}
}
void TacheEchanges::continuerDownload(){
if(indiceDownload==listDownload.size()){
indiceDownload=0;
continuerSuppression();
return;
}
else{
ftp->recupFichier_X3_OFT(listDownload.at(indiceDownload).name());
indiceDownload++;
}
}
最佳答案
还有look here主动和被动的区别
关于c++ - QFTP commandFinished 发送得太早,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35720984/
我正在使用 voip 推送通知制作 ios 应用程序。 我想从 Node js 发送 voip 推送通知,但不是很好。 我阅读了本教程 CallKit iOS Swift Tutorial for V
我编写了一个服务器,当浏览器尝试连接到某些站点时,它会检查黑名单并发回 404,但是当我调用 send() 时没有错误,但消息不会出现在网络上浏览器,除非我关闭连接? 有什么建议吗? 接受来自浏览器的
#include int main() { char c = getchar(); //EOF (ctrl + d ) while( ( c = getchar() ) != '?'
我正在尝试使用MailMessage对象通过PowerShell发送电子邮件。该脚本使用Import-CSV来使用文件,然后在电子邮件正文中使用ConvertTo-HTML。由于我要发送的电子邮件客户
我需要创建一个脚本,每 30 秒对网络流量进行一次采样并存储发送/接收的字节。该数据随后用于绘制图形。我编写了一个在 Windows 2012 上完美运行的程序,但我意识到某些 cmdlet 在以前的
我正在运行“autoit3.chm”文件。当它运行时,我想发送一个向下键箭头,但它不起作用: $file = FileGetShortName("C:\Users\PHSD100-SIC\Deskto
当我使用网络浏览器测试我的程序时,我可以很好地写入套接字/FD,所以我决定循环它并在连接中途切断连接,我发现了一个问题。 send() 能够在套接字不可用时关闭整个程序。我认为问题在于该程序陷入了第
我正在运行“autoit3.chm”文件。当它运行时,我想发送一个向下键箭头,但它不起作用: $file = FileGetShortName("C:\Users\PHSD100-SIC\Deskto
所以我试图向自己发送数据并接收数据然后打印它,现在我已经测试了一段时间,我注意到它没有发送任何东西,事实上,也许它是,但我没有正确接收它,我需要这方面的帮助。 这就是我用来发送数据的
问题:开发人员创建自己的序列化格式有多常见?具体来说,我使用 java 本质上将对象作为一个巨大的字符串发送,并用标记来分隔变量。 我的逻辑:我选择这个是因为它几乎消除了语言依赖性(忽略java的修改
我必须在 Linux 上编写一个应用程序,该应用程序需要与具有自定义以太网类型的设备进行通信。甚至在如何编写这样的应用程序中也有很多解决方案。一个缺点是需要 root 访问权限(AFAIK)。之后释放
我有一个包含三个单选按钮选项的表单。我需要将表单数据提交到另一个文件,但由于某种原因,发送的数据包含所选单选按钮的值“on”,而不是 value 属性的值。 我尝试通过 post() 函数手动操作和发
基本上我想实现这样的目标: Process 1 Thread 1 Receive X from process 2 Thread 2 Receive Y from proces
我目前正在 Google App Engine 上开发一个系统,对它还很陌生,我正在使用 Java 平台进行开发。我在 servlet 之间发送 session 对象时遇到问题。我已经在 appeng
当我尝试将“this”(触发的元素)作为参数发送给函数时,函数收到“Object[Document build.php]”作为参数,而不是触发的元素。请让我知道我的错误: function set(a
我正在寻找让我的应用响应联系人 > 发送的魔法咒语。我希望能够接收联系人的 URI 以便检索联系人。谁有 list 过滤器/代码 fragment 吗? 最佳答案 我没有睾丸,但您可以尝试基于 ACT
关于我心爱的套接字的另一个问题。我先解释一下我的情况。之后我会告诉你是什么困扰着我。 我有一个客户端和一个服务器。这两个应用程序都是用 C++ 编写的,实现了 winsock2。连接通过 TCP 和
我看到了这篇文章 http://www.eskimo.com/~scs/cclass/int/sx5.html 但这部分让我感到困惑:如果我们已经使用 send_array 或 send_array_
我对这行代码有疑问。我必须将一个数据包带到一个端口并重新发送到接口(interface)(例如:eth0)。我的程序成功地从端口获取数据包,但是当我重新发送(使用 send())到接口(interfa
我正在尝试编写一个 X11 输入驱动程序,它可以使用我的 Android 手机上的触摸屏来移动和单击鼠标。我可以正常移动鼠标,但我无法让应用程序正确识别点击。我当前的代码位于 https://gist
我是一名优秀的程序员,十分优秀!