FTP-Upload mit Vortschrittsanzeige

Coalminer

Mitglied
Hi

Wie kann ich mit Visual C++ eine Datei auf einen FTP-Server uploaden und mir dabei anzeigen lassen wie weit der Upload ist ?

Mit CFtpConnection::PutFile geht schonmal der Upload, nur find ich keine möglichket den Status der Verbindung zu sehen.
Für CFtpConnection::OpenFile steht folgendes in der MSDN:

Call this member function to open a file located on an FTP server for reading or writing. OpenFile should be used in the following situations:
*...
*...
* An application needs a fine level of control over a file transfer. For example, the application may want to display a progress control indicate the progress of the file transfer status while downloading a file.


Hat mir jemand einen Beispielsource in dem sowas mal grob umgesetzt wurde ?


Mein Ansatz:
nach ::OpenFile kann mit ::Write die Datei auf den FTP Byteweise geschrieben werden.
Muss ich jetzt nurnoch mit CFile::Open ein Lokale Datei öffnen und diese Byteweise über einen Buffer rüberschaufeln ?


Wenn jemand ein Beispiel hätte wäre das klasse.
Danke.
 
ich habe keine ahnung aber villeicht musst du dir die aktuelle dateigröße
vom server laden und dann: (aktuell/komplett)*100 gibt dann die prozent aus die er fortgeschritten ist...
 
So gehts:


Code:
void CCustomerDlg::UploadFTP()
{
	CString csWindowText;
	
	CFile sourceFile;
	CFileException ex;

	if (!sourceFile.Open("update.tar",CFile::modeRead | CFile::shareDenyWrite, &ex))
	{
		AfxMessageBox("Probleme beim öffnen der SourceFile.");
	}
	
	char pbuf[100];
	UINT nBytesRead=0;
	UINT nSumBytes=0;
	UINT nSourceSize=sourceFile.GetLength();

	CInternetSession INetSession;
    CFtpConnection* pFtpConnection;
	CInternetFile* pFtpFile;
	
	pFtpConnection = INetSession.GetFtpConnection("xxxxxxx","xxxxxx,"xxxxxxx");
	pFtpConnection->SetCurrentDirectory("files");
	pFtpFile = pFtpConnection->OpenFile("update.tar", GENERIC_WRITE, FTP_TRANSFER_TYPE_BINARY, 1); 
	
	do
	{	
		nBytesRead = sourceFile.Read( pbuf, 100 );
		pFtpFile->Write(pbuf, nBytesRead);
		
		nSumBytes=nSumBytes+nBytesRead;
		csWindowText.Format("%i von %i",nSumBytes,nSourceSize);
		this->SetWindowText(csWindowText);

	}while(nBytesRead == 100);

	if (pFtpConnection != NULL)
       pFtpConnection->Close();
    delete pFtpConnection;

	sourceFile.Close();
}

Habs also schon selbst gelöst.
Das is so noch nich ganz lupenrein programmiert, aber es funktioniert mal generell
Also falls jemand mal ein ähnliches Probelm zu lösen hat kann er sich dran orientieren.
 
Zuletzt bearbeitet:
Zurück