MFC PopUp-Fenster (Fehlermeldungen) unterdrücken ? ==> GELÖST
-
Hallo, ich habe ein Miniprogramm gebastelt, das eine Datei via FTP auf einen Server übermittelt und danach eine Datei auf dem Webserver abruft. Das ganze passiert im Minutentakt, rund um die Uhr. Leider ist es aber so, das aus irgendwelchen Gründen die Verbindung manchmal abreist oder beendet wird, dann gibt es logischerweise eine Fehlermeldung. Wenn das öfter vorkommt, dann sind ganz viele solcher Fehlermeldungen auf dem Bildschirm und man kann das Programm nicht mehr bedienen. Gibt es eine Möglichkeit Fehlermeldungen zu unterdrücken, und wenn ja, wo soll ich die dazubauen? Die Fehlermeldungen lauten immer so:
Das Zeitlimit für den Vorgang wurde erreicht. bzw.
Die FTP-Sitzung wurde beendet.Das Zeitlimit für den Vorgang wurde erreicht. Die FTP-Sitzung wurde beendet. CFtpConnection* ftpConn = session.GetFtpConnection(servername,serveruser,serverpass,21,FALSE); if (ftpConn) { timeNow=timeNow.GetCurrentTime(); txt.Format("%02d:%02d:%02d ",timeNow.GetHour(),timeNow.GetMinute(),timeNow.GetSecond()); AddText2Info(txt+"Verbindung zum FTP-Server hergestellt... "); timeNow=timeNow.GetCurrentTime(); //AddText2Info("Sende Datei zum FTP-Server..."); Sleep(50); if (!ftpConn->PutFile(localfilename,remotefilename,FTP_TRANSFER_TYPE_ASCII,1)) { //AfxMessageBox("Es ist ein Fehler aufgetreten!"); } else { timeNow=timeNow.GetCurrentTime(); txt.Format("%02d:%02d:%02d ",timeNow.GetHour(),timeNow.GetMinute(),timeNow.GetSecond()); AddText2Info(txt+"Datei wurde gesendet. "); ///// Webseite aufrufen ///// CInternetSession session("test",1,INTERNET_OPEN_TYPE_PRECONFIG); CStdioFile* pFile = NULL; pFile = session.OpenURL(serverurl,1,INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_TRANSFER_BINARY,NULL,0); if(pFile) { while (pFile->ReadString(somecode) != NULL) { lstrbuf = lstrbuf + somecode; } pFile->Close(); } lstrbuf.Replace("|RETURN|","\r\n"); AddText2Info(lstrbuf); // und HTML Code ausgeben ///// WEBSEITEN AUFRUFEN ENDE / ///// } session.Close(); ftpConn->Close(); timeNow=timeNow.GetCurrentTime(); txt.Format("%02d:%02d:%02d ",timeNow.GetHour(),timeNow.GetMinute(),timeNow.GetSecond()); AddText2Info(txt+"FTP Verbindung wird getrennt "); AddText2Info("--------------------------------"); } else { AddText2Info("Es ist ein Fehler aufgetreten!\n\nVerbindung mit Server ist fehlgeschlagen!"); } delete ftpConn; ftpConn = NULL;
-
Weis denn niemand was?
Hab jetzt schon mit FindWindow und mit FindWindowEx experimentiert um es vielleicht mit ::CloseWindow zu schließen. Problem ist nur, ich weis nicht wie ich das richtige Fenster finden soll, wenn es z.B. dreimal vorhanden ist bzw. mehrere Fenster denselben Namen haben.
CString str; CString err1, err2, err3; HWND findwin,cwin; err1="Das Zeitlimit für den Vorgang wurde erreicht."; err2="Der Servername oder die Serveradresse konnte nicht verarbeitet werden."; err3="Der Servername oder die Serveradresse konnte nicht verarbeitet werden."; if(findwin = ::FindWindow("#32770","HWetterWeb")) { if (cwin = ::FindWindowEx(findwin,0,"Static",err1)) { ::CloseWindow(findwin); } if (cwin = ::FindWindowEx(findwin,0,"Static",err2)) { ::CloseWindow(findwin); } if (cwin = ::FindWindowEx(findwin,0,"Static",err3)) { ::CloseWindow(findwin); } }
-
Welche Zeile in deinem Code erzeugt denn die Fehlermeldung?
-
Schau mal, was die MSDN dazu sagt:
CInternetSession::GetFtpConnection
CFtpConnection* GetFtpConnection( LPCTSTR pstrServer, LPCTSTR pstrUserName = NULL, LPCTSTR pstrPassword = NULL, INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER, BOOL bPassive = FALSE );
Throw ( CInternetException );Return Value
A pointer to a CFtpConnection object. If the call fails, determine the cause of the failure by examining the thrown CInternetException object.
Wenn du ALLES versucht hast, um eine Fehlermeldung mit ifs zu verhindern und sie kommt trotzdem, dann musst du mit try-catch arbeiten.
-
exception2 schrieb:
Welche Zeile in deinem Code erzeugt denn die Fehlermeldung?
Das scheint die FTP-Verbindung selbst zu erzeugen, so wie es estartu_de erkannt hat. Ich schau mal wie das mit try/catch funktioniert, damit hatte ich noch nix zu tun. Aber mit der Forumsuche sollte sich was finden.
-
Die Zeile ist es:
CFtpConnection* ftpConn = session.GetFtpConnection(servername,serveruser,serverpass,21,FALSE);
-
Für alle die es interessiert, hier meine Lösung die bei mir funktioniert:
try { CFtpConnection* ftpConn = session.GetFtpConnection(servername,serveruser,serverpass,21,FALSE); ... } catch (CInternetException *e) { TCHAR sz[1024]; CString str; e->GetErrorMessage(sz,1024); e->Delete (); str.Format("%s",sz); //AddText2Info("ÜBERTRAGUNGSFEHLER: "+str); //Meldung an ein Fenster senden }
So ist es denk ich richtig
Bin ich nur froh das schon viele den Begriff CInternetException benutzt haben -> danke an die Forumsuche