Dateigröße vom Server auslesen



  • Hallo
    Ich versuche verzweifelt die Größe einer beliebigen Datei auf dem Server auszulesen.
    mit CFile.GetLength bekomme ich zwar einen Wert, dieser ist jedoch falsch.
    Mittlerweile bin ich soweit, das ich weiß das es ein Fehler von MFC ist. Es soll angeblich der Wert ausgelesen werden, bei dem der Buffer gerade steht.
    Das nützt mir natürlich nicht viel, denn ich will ja den richtigen Wert. Kann mir jemand helfen.
    Mit CHttpConnection ... habe ich es auch schon versucht
    Leider noch ohne Erfolg.



  • Damit du CFile::GetLength() aufrufen kannst musst du die Datei ja erstmal öffnen.
    Und damit kann man nur lokale Dateien öffnen, also geht es natürlich nicht.

    Oder zeig mal bitte wie du es gemacht hast.

    Und von welchem Server sprichst du überhaupt?



  • hallo nochmal. So öffne ich die

    CString nFileSizeServer;
    CInternetFile* pNetFile;
    CInternetSession* pInternetSession;
    CFtpConnection* pFTPConnection; //FTPSession erstellen 
    
    pFTPConnection = pInternetSession->GetFtpConnection("Server", "User", "Passwd", NULL, false); 
    
    pNetFile = pFTPConnection->OpenFile(__argv[1],GENERIC_READ,FTP_TRANSFER_TYPE_BINARY,1);
    
    //******DATEIGRÖßE ERMITTELN*********************************	
    nFileSizeServer.Format ("%i", pNetFile->GetLength());
    	int max = atoi(nFileSizeServer);
    	AfxMessageBox(nFileSizeServer);
    //Es ist aber nicht die richtige Größe auch nicht in Bytes 
    //***********************************************************
    

    Das klappt leider nicht! Hat jemand eine andere Idee wie ich die Größe einer Datei auf dem Server ermitteln kann. Am Besten ohne die erst komplett zu laden





  • Ne den Beitrag habe ich bis jetzt nicht gefunden.
    Aber herzlichen Danke der bringt mich so umn etwa 100% weiter.



  • Hierbei habe ich leider noch ein kleines Problem
    Wenn ich die seek Methode benutze springt er aus dem Programm. Der Code der danch steht wird nicht mehr angesprochen. Ich habe mal die try Catch Geschichte weg gelassen und erhielt eine Meldung in der stand "Ausführung war erfolgreich" Ich habe nirgendwo ein solche meldung geschrieben. Meine Vermutung ist also, das die Methode das ausführt. Mir ist also nicht möglich diese Methode zu benutzen da darauf folgender COde nicht benutzt wird.
    Woran liegt das. Muss ich global irgendwas ausschalten??



  • ich nerver einige wahrscheinlich damit, aber ich bitte doch nochmals um Hilfestellung.
    der Beitrag ist schon ganz gut
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39100.html
    Nur leider klappt der bei mir nicht. Ich habe Probleme mit SeektoEnd.
    Sobald diese Methode ausgeführt wurde, wird sofort mein Programm beendet. Ohne irgendwelche Fehler. Ich will doch einfach nur wissen wie groß meine Datei auf dem Server ist 😕

    anbei mein Code

    //**********GETFILE*****************************************
    //**********************************************************
    BOOL getfile()
    {
    //**********Definitionen*************************************
    	CString arg2 = __argv[2];
    	CString nFileSizeServer;
    	CString nFileSizeLocal;
    	CString FileName = "Downloading File: ";
    	CFile FileLocal;
    	CInternetFile* pNetFile;
    
    	int nFileSize      = 0; 
    	int nBytesToWrite  = 0; 
    	char cReadBuffer [512];
    //***********************************************************
    
    	mo_textfield->SetWindowText(FileName + __argv[1]);
    	mo_statusbar->SetRange(0,309);
    	mo_statusbar->SetPos(0);
    	// Download starten und in Datei speichern 
    	try 
    	{ 
    		pNetFile = pFTPConnection->OpenFile(__argv[1],GENERIC_READ,FTP_TRANSFER_TYPE_BINARY,1);
    
    //******DATEIGRÖßE ERMITTELN*********************************	
    		nFileSizeServer.Format ("%i", pNetFile->GetLength());
    		//	int max = atoi(nFileSizeServer);
    		AfxMessageBox(nFileSizeServer);
    //***********************************************************
    //******NEUE DATEI ERSTELLEN*********************************
    
    		FileLocal.Open(arg2+__argv[1], CFile::modeCreate | CFile::modeWrite | CFile::typeBinary); 
    		while (nBytesToWrite = pNetFile->Read(cReadBuffer, 512)) 
    		{ 
    			FileLocal.Write(cReadBuffer, nBytesToWrite); 
    			nFileSizeLocal.Format("%i", (FileLocal.GetLength()/1024));
    			int akt_kb = atoi(nFileSizeLocal);
    			mo_statusbar->SetPos(akt_kb);
    		}
    		pInternetSession->Close(); 
    	} 
    	catch(CInternetException *IE) 
    	{     
    		return FALSE; 
    	}                          
    	return TRUE; 
    
    }
    

Anmelden zum Antworten