FTP Upload Fortschritt

Hookah

Erfahrenes Mitglied
So , nun hab ich meine vorherigen Problemchen gelöst
und da kommt dann auch schon das nächste

Mit
Code:
	HINTERNET hInternet;
    HINTERNET hFtpSession;
    hInternet = InternetOpen(NULL,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
    hFtpSession = InternetConnect(hInternet,TEXT("ftp.uploaded.to") , INTERNET_DEFAULT_FTP_PORT, TEXT("bone"), TEXT("**passwort**"), INTERNET_SERVICE_FTP, 0, 0);
	
	FtpPutFile(hFtpSession, TEXT("C:\\Release.rar"), TEXT("file1.rar"), FTP_TRANSFER_TYPE_BINARY, INTERNET_FLAG_PASSIVE) ;

lad ich nun eine Datei hoch

Hab mal Probiert mir während des Uploads immer Upload ausgeben zu lassen mit einer while schleife und zwar so:

Code:
	while(FtpPutFile(hFtpSession, TEXT("C:\\Release.rar"), TEXT("file1.rar"), FTP_TRANSFER_TYPE_BINARY, INTERNET_FLAG_PASSIVE))
	{
	
		cout << "\n Upload";
	}


Es wird lediglich nach dem hochladen ein einziges mal Upload ausgegeben.

Gibt es da eine andere Möglichkeit?
Und kann man herausfinden wie viel bytes schon hochgeladen wurden?

Ich finde absolut nichts bei Google über FTP funktionen und schon gar nicht das was ich suche und langsam wirds schon peinlich das ich hier so viel stuss frage :D
 
Du wolltest wohl auf INTERNET_STATUS_CALLBACK hinaus

Danach hab ich dann mal gegooglet weil ich bei MSDN nur Bahnhof verstehe
und dann was gelesen das ich noch eine callback Funktion dazu brauche
und wie diese auszusehen hat weiss ich auch nicht

Was ich wohl verstanden habe ist
das ich

Code:
INTERNET_STATUS_CALLBACK lpfnCallback;

...

InternetSetStatusCallback(hFtpSession, lpfnCallback);

brauche und bei InternetSetStatusCallback als ersten Parameter den Connect angeben muss und als zweiten angeben muss worin die Infos gespeichert werden

Wie ich nun an die Infos dran komme war leider nicht ersichtlich aus den Codes die ich gefunden habe

mit cout << lpfnCallback; bekomm ich mal 0031F40 oder 00511F40 oder andere Sachen raus und das bringt mich auch nicht weiter

Andere frage wäre noch ob ich bei InternetOpen als letzten Parameter
INTERNET_FLAG_ASYNC setzen muss.

Mach ich das funktioniert aber der Upload nicht mehr - hab aber gelesen das ich das machen muss.

Immer mehr verwirrende Sachen...

Kannst du mir vielleicht noch ein zwei treffende Wörter geben unter denen ich eventuell etwas finden kann?
Ich such mich duselig
 
Hi.

Du solltest dich informieren, was Callback Funktionen sind.

Du mußt eine Funktion definieren, die die gleiche Signatur wie InternetStatusCallback (siehe http://msdn.microsoft.com/en-us/library/aa385121(VS.85).aspx).

Diese Funktion kannst du dann an die InternetSetStatusCallback übergeben.

Deine Funktion würde dann automatisch aufgerufen werden wenn eine Statusänderung eintritt. (siehe http://msdn.microsoft.com/en-us/library/aa383976(VS.85).aspx für ein Beispiel)

Dir ist aber schon bewußt, das du damit nicht die Übertragung der Bytes verfolgen kannst?

Ich bezog mich in meiner letzten Nachricht auf folgendes:
FtpPutFile is a high-level routine that handles all the bookkeeping and overhead associated with reading a file locally and storing it on an FTP server. An application that needs to send file data only, or that requires close control over the file transfer, should use the FtpOpenFile and InternetWriteFile functions.
Gruß
 
Nein war mir nicht bewusst das es damit nicht geht.
Du bist mir echt eine große Hilfe
Mit deinen Links kann ich ja schonmal die ein oder anderen Ereignisse rausfischen was ich sowieso brauche


Und womit ist es möglich herauszufinden wie viele Bytes schon gesendet wurden?
Ist es überhaupt möglich?
 
Und womit ist es möglich herauszufinden wie viele Bytes schon gesendet wurden?
Ist es überhaupt möglich?
Wie in dem Absatz steht den ich zitiert habe, müßtest du dann die InternetWriteFile Funktion verwenden.

Dazu mußt du die Datei öffnen (mit CreateFile oder fopen) und Stück für Stück auslesen. Die ausgelesenen Daten schreibst du dann mit InternetWriteFile in die Zieldatei auf dem FTP Server. Dann mußt du nur noch mitzählen wieviel Daten schon übertragen wurden.

Gruß
 
Zurück