Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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);

    }



}

Geschrieben
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.

Geschrieben

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

Geschrieben
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.

Geschrieben
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);

	}

}

Geschrieben
void CFtpConnection::AssertValid() const

{	

             ASSERT(m_pSession != NULL);

	if (m_hConnection != NULL)       //Zeile 1768

	{

		ASSERT(AfxGetInternetHandleType(m_hConnection)

				== INTERNET_HANDLE_TYPE_CONNECT_FTP);

	}

}

Geschrieben

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.

Geschrieben (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 von wulfgang
Geschrieben

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.

Geschrieben
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

Geschrieben

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();

    }



}

Geschrieben

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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...