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
-
Kennst du eigentlich den hier schon ?
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39100.html
-
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 istanbei 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; }