Zum Inhalt springen

GetFile


wulfgang

Empfohlene Beiträge

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

    }



}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

	}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

    }



}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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