Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

GetFile

Empfohlene Antworten

Veröffentlicht

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

    }



}

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.

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

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.

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

	}

}

void CFtpConnection::AssertValid() const

{	

             ASSERT(m_pSession != NULL);

	if (m_hConnection != NULL)       //Zeile 1768

	{

		ASSERT(AfxGetInternetHandleType(m_hConnection)

				== INTERNET_HANDLE_TYPE_CONNECT_FTP);

	}

}

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

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

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

    }



}

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.

Jaaaa, danke!! Es läuft. Das war das Problem.:D:D

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.