wulfgang Geschrieben 2. Februar 2009 Teilen Geschrieben 2. Februar 2009 Morgen, ich möchte mit GetFile eine Textdatei von einem FTP-Server lokal abspeichern. Leider funktioniert das noch nicht so ganz. Ich erhalte 4 Warnungen warning C4129: 'g' : unrecognized character escape sequence warning C4129: 'g' : unrecognized character escape sequenc warning C4129: 'C' : unrecognized character escape sequence warning C4129: 'T' : unrecognized character escape sequence Die Warnungen beziehen sich auf die zeilen mit FindFile und Getfile. Können die mein Problem auslösen? Ist das wieder mit Unicode und ANSI? Wie kann ich diese beseitigen? GetLastError sagt Fehler Nummer 6.The handle is invalid. Während der Ausführung des Programms erhalte ich dann:Debug Assertion Failed! Program:.... File:f:\... #include "StdAfx.h" #include "transfer_textfile.h" #include "windows.h" #include <iostream> #include "Connect.h" using namespace std; transfer_textfile::transfer_textfile(void) { Connect(); CFtpConnection* connection_pointer; connection_pointer=Connect::getLastConnection(); CFtpFileFind finder(connection_pointer); try { BOOL bWorking = finder.FindFile(_T("server/ordner/ordner/bu.txt")); //Hier Warnungen vom Compiler if(bWorking) { BOOL bGot = connection_pointer->GetFile(_T("ordner/ordner/ordner/bu.txt"),_T("C:/ordner/TxtTransfer")); //Hier Warnungen vom Compiler } else { //something wrong with the file.. inform the user cout << "The File specified could not be found.!"<<GetLastError(); } } catch(CException* error) { TCHAR szCause[1024]; error->GetErrorMessage(szCause,1024); //sCause.Format("%s",szCause); } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 2. Februar 2009 Teilen Geschrieben 2. Februar 2009 Die Warnungen beziehen sich auf die zeilen mit FindFile und Getfile.Die hast du anscheinend geändert, bevor du sie hier eingestellt hast. Ich vermute, im echten Code stehen Backslashes, und zwar einzelne. Erinnere dich daran, was ich dir hier gesagt habe. Debug Assertion Failed! Program:.... File:f:\...Hier wäre gut zu wissen, an welcher Stelle in deinem Programm die Assertion fehlschlägt. Das kannst du mit dem Debugger rausfinden. Die Datei und Zeilennummer wären auch gut, mit "..." ist die Fehlerdiagnose immer etwas schwierig. Der Handle-Fehler ist vermutlich ein Folgefehler. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 2. Februar 2009 Autor Teilen Geschrieben 2. Februar 2009 Hallo, keine Angst im Code stehen keine einzelnen Backslashes. Meine vollständige Fehlermeldung während der Programmausführung lautet hier: Debug Assertion Failed! Prgram: ... File: f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\inet.cpp Line: 1768 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 2. Februar 2009 Teilen Geschrieben 2. Februar 2009 Hallo, keine Angst im Code stehen keine einzelnen Backslashes.Kann eigentlich nicht sein. Warnung C4129 kommt nämlich nur bei einzelnen Backslashes. Meine vollständige Fehlermeldung während der Programmausführung lautet hier: Dann such mal die Datei inet.cpp in deinem Visual C++-Installationsordner, und zeig das Umfeld von Zeile 1768. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 2. Februar 2009 Autor Teilen Geschrieben 2. Februar 2009 Kann eigentlich nicht sein. Warnung C4129 kommt nämlich nur bei einzelnen Backslashes. verdammt ertappt:upps habe ich heute morgen tatsächlich übersehen. Die fehler sind aber trotzdem noch da. In der Umgebung von 1768 steht: void CFtpConnection::AssertValid() const { ASSERT(m_pSession != NULL); if (m_hConnection != NULL) { ASSERT(AfxGetInternetHandleType(m_hConnection) == INTERNET_HANDLE_TYPE_CONNECT_FTP); } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 2. Februar 2009 Teilen Geschrieben 2. Februar 2009 In der Umgebung von 1768 steht: Da sind zwei ASSERTs drin. Welche Zeile ist 1768? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 2. Februar 2009 Autor Teilen Geschrieben 2. Februar 2009 void CFtpConnection::AssertValid() const { ASSERT(m_pSession != NULL); if (m_hConnection != NULL) //Zeile 1768 { ASSERT(AfxGetInternetHandleType(m_hConnection) == INTERNET_HANDLE_TYPE_CONNECT_FTP); } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 2. Februar 2009 Teilen Geschrieben 2. Februar 2009 Die Zeile muss eigentlich ein ASSERT enthalten. Ich nehme mal an, dass es die darüber ist. Sieht so aus, als wäre die Session deiner CFtpConnection-Instanz ungültig. Ich habe Connect::getLastConnection() im Verdacht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 2. Februar 2009 Autor Teilen Geschrieben 2. Februar 2009 (bearbeitet) Die Zeile muss eigentlich ein ASSERT enthalten. Ich nehme mal an, dass es die darüber ist. Also 1768 ist laut Visual Studio wirklich 1768. Ich habe Connect::getLastConnection() im Verdacht. Ich habe auch noch versucht den übergebenen Zeiger connection_pointer in einer anderen Funktion zu verwenden, hat aber auch nicht geklappt. Ist also wahrscheinlich, dass der fehler dort liegt. Hier zur Kontrolle: In meiner Connect.h: #pragma once #include <afx.h> #include <afxwin.h> #include <afxinet.h> #include <stdio.h> class Connect { public: Connect(void); static CFtpConnection * Connect::getLastConnection(); static CFtpConnection *connection_pointer; public: ~Connect(void); }; Connect.cpp: CFtpConnection* Connect::connection_pointer=NULL; Connect::Connect(void) { .... try { //FTP-Verbindung wird eröffnet,Methode GetFtpConnection wird auf session angewandt, //connection wird auf zurückgegeben Zeiger gesetzt if(connection = session.GetFtpConnection(pstrServer, login, passwd, port, bPassive)) { cout << "Verbindung wurde aufgebaut\n"; connection_pointer=connection; } } //Fehleroutine catch (CInternetException* pEx) { cout<<"FEHLER : "<<GetLastError()<<endl; TCHAR sz[1024]; pEx->GetErrorMessage(sz, 1024); printf_s("ERROR! %S\n", sz); pEx->Delete(); } cout << "Test Konstruktor von Connect erfolgreich\n"; } Connect::~Connect(void) { } CFtpConnection * Connect::getLastConnection() { return connection_pointer; } Bearbeitet 2. Februar 2009 von wulfgang Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 2. Februar 2009 Teilen Geschrieben 2. Februar 2009 Du hast ein Talent dafür, wichtige Information wegzulassen, und statt dessen "..." hinzuschreiben. Was ist denn session? Ist das eine lokale Variable in Connect::Connect? Dann wird sie ungültig, wenn der Konstruktor durchgelaufen ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 2. Februar 2009 Autor Teilen Geschrieben 2. Februar 2009 Dann wird sie ungültig, wenn der Konstruktor durchgelaufen ist. session hatte ich vorher nur im Konstruktor. Habe es nun geändert. Ist das so richtig? CFtpConnection* Connect::connection_pointer=NULL; CInternetSession session((_T("My FTP Session")),1, INTERNET_OPEN_TYPE_PROXY , (_T( "proxy.org")), NULL, 0); Connect::Connect(void) { //Zeiger auf CFtpConnection CFtpConnection *connection; //Deklarationen für GetFtpConnection Member-Funktion LPCTSTR pstrServer = _T("proxy.org"); LPCTSTR login = _T("user"); LPCTSTR passwd = _T("password"); INTERNET_PORT port = 21; BOOL bPassive = TRUE; cout << "Verbinde mit " << "proxy.org" << " ...\n"; try { //FTP-Verbindung wird eröffnet,Methode GetFtpConnection wird auf session angewandt, //connection wird auf zurückgegeben Zeiger gesetzt if(connection = session.GetFtpConnection(pstrServer, login, passwd, port, bPassive)) { cout << "Verbindung wurde aufgebaut\n"; connection_pointer=connection; } } //Fehleroutine catch (CInternetException* pEx) { cout<<"FEHLER : "<<GetLastError()<<endl; TCHAR sz[1024]; pEx->GetErrorMessage(sz, 1024); printf_s("ERROR! %S\n", sz); pEx->Delete(); } cout << "Test Konstruktor von Connect erfolgreich\n"; } Connect::~Connect(void) { } CFtpConnection * Connect::getLastConnection() { return connection_pointer; } Jetzt erhalte ich allerdings Fehler 18-There are no more files. Die Textdatei, die ich haben will ist aber da. Wenn ich das Programm dann schließen möchte erhalte ich Debug Error Program:... R6025 -pur virtual function call Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 2. Februar 2009 Teilen Geschrieben 2. Februar 2009 Ich glaube nicht, dass du bei FindFile einen Pfad angeben darfst. Du musst vermutlich zuerst in das Zielverzeichnis wechseln. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 4. Februar 2009 Autor Teilen Geschrieben 4. Februar 2009 Morgen, ich wechsel jetzt erst in das Zielverzeichnis. Dann erhalte ich als Ausgabe auf dem Bildschirm: Verzeichnis wurde mit Erfolg gewechselt 5 Fehler 5 steht ja für Access is denied. Heißt das nun, dass ich keine Rechte habe? Wenn ich einzelne Backslashes benutze, erhalte ich als Fehlermeldung Nummer 80 The file exists. transfer_textfile::transfer_textfile(void) { Connect(); CFtpConnection* connection_pointer; connection_pointer=Connect::getLastConnection(); CFtpFileFind finder(connection_pointer); try { if(connection_pointer->SetCurrentDirectory(_T("ordner/bu"))) { cout<<"Verzeichnis wurde mit Erfolg! gewechselt\n"; BOOL bWorking = finder.FindFile(_T("bu.txt")); if(bWorking) { BOOL bGot = connection_pointer->GetFile(_T("bu.txt"),_T("C:/Ordner/TxtTransfer")); if (bGot) { cout << "Transfer sollte erfolgt sein\n"; } else { cout << GetLastError() << "\n"; } } else { cout << "The File specified could not be found.!"<<GetLastError(); } } else { DWORD dwInfo = 0; TCHAR puffer[250] = _T(""); DWORD dwSize = sizeof(puffer) / sizeof(TCHAR); if( !InternetGetLastResponseInfo(&dwInfo, puffer, &dwSize) ) { cout << GetLastError(); cout << "Aufruf InternetGetLastResponseInfo nicht erfolgreich"; } else { wcout << puffer; cout << "Aufruf InternetGetLastResponseInfo erfolgreich"; } } } catch(CException* error) { TCHAR szCause[1024]; error->GetErrorMessage(szCause,1024); printf_s("ERROR! %S\n", szCause); error->Delete(); } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Februar 2009 Teilen Geschrieben 4. Februar 2009 Schau dir mal den dritten Parameter von CFtpConnection::GetFile an. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 4. Februar 2009 Autor Teilen Geschrieben 4. Februar 2009 Der 3.Parameter von CFtpConnection::GetFile ist doch BOOL bFailIfExists. Wenn ich nun BOOL bGot = connection_pointer->GetFile(_T("bu.txt"),_T("C:/CPlusPlus/TxtTransfer"),FALSE); sollte es doch auf jeden Fall funktionieren? Ich erhalte aber immer noch den gleichen Fehler. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Februar 2009 Teilen Geschrieben 4. Februar 2009 Ist "C:/CPlusPlus/TxtTransfer" ein Verzeichnis? Falls ja, gib da bitte mal einen Dateinamen mit an. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
peter_lustich_kanns Geschrieben 4. Februar 2009 Teilen Geschrieben 4. Februar 2009 letzten endes willst du laut deinem Code die Datei mit folgendem namen benutzten "C:/CPlusPlus/TxtTransferbu.txt" , oder sehe ich das falsch??? "C:\CPlusPlus\TxtTransfer\bu.txt" scheint mir richtiger... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 4. Februar 2009 Autor Teilen Geschrieben 4. Februar 2009 Jaaaa, danke!! Es läuft. Das war das Problem.:D Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.