Veröffentlicht 2. Februar 200916 j 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); } }
2. Februar 200916 j 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.
2. Februar 200916 j 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
2. Februar 200916 j 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.
2. Februar 200916 j 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); } }
2. Februar 200916 j In der Umgebung von 1768 steht: Da sind zwei ASSERTs drin. Welche Zeile ist 1768?
2. Februar 200916 j void CFtpConnection::AssertValid() const { ASSERT(m_pSession != NULL); if (m_hConnection != NULL) //Zeile 1768 { ASSERT(AfxGetInternetHandleType(m_hConnection) == INTERNET_HANDLE_TYPE_CONNECT_FTP); } }
2. Februar 200916 j 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.
2. Februar 200916 j 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 200916 j von wulfgang
2. Februar 200916 j 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.
2. Februar 200916 j 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
2. Februar 200916 j Ich glaube nicht, dass du bei FindFile einen Pfad angeben darfst. Du musst vermutlich zuerst in das Zielverzeichnis wechseln.
4. Februar 200916 j 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(); } }
4. Februar 200916 j 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.
4. Februar 200916 j Ist "C:/CPlusPlus/TxtTransfer" ein Verzeichnis? Falls ja, gib da bitte mal einen Dateinamen mit an.
4. Februar 200916 j 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...
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.