dateigröße von einer internet-datei ermitteln?
-
Habe das gleiche Problem.
OpenUrl gibt im Grunde ja auch nur ein CFile-Objekt aus.
Und mit GetLenght gehts nicht, es kommen falsche Werte dabei raus...
Bei HTTP-Dateien kann man auch den CONTENT_LENGHT-Header auslesen, nur leider klappt das nicht bei ftp.Wär gut,wenn jemand dazu noch ne Idee hätte
MfG PMrogan
-
Hier mal noch eine Alternative:
Würde man sich den direkten Umgang mit der CInternetSession sparen
1. File downloaden (Temp-Verzeichnis)
2. per CFile die Größe der Datei ermitteln
3. Anschließend File behalten oder wieder löschen !!!Was ich mich nur Frage: Wozu braucht jemand die Größe eines Files... ob man das File braucht ist entscheidend
MfG veganza
-
@veganza: was ist wenn die Datei mehrer MB groß ist?:D
Die soll das Prog dann mal eben downloaden, die größe rausfinden und wieder öffnen?
das ist ja nicht dein Ernst:p
-
Die Datei Größe braucht man z.b. wenn man in einen Programm eine Update funktion einbaut. so können dann auch user mit langsameren verbindungen wählen ob sie das update machen wollen.
das mit CFile hab ich auch ausprobiert, liefert die falschen werte.
die datei komplett runterladen ist auch nichts...
es muss doch noch eine andere lösung geben.
-
Vorweg: Ich habe nicht gesagt das meine Alternative gut ist
Aber OK hast ja recht... machen Wir es lieber so:
CString sUrl,tmp; DWORD dwFileSize; char szSizeBuffer[32]; DWORD dwLengthSizeBuffer = 32; HINTERNET hFileInfo; CInternetSession mysession; sUrl = "Die URL zum File"; hFileInfo = InternetOpenUrl(mysession, sUrl, NULL, 0, 0, 0); BOOL bQuery = ::HttpQueryInfo(hFileInfo, HTTP_QUERY_CONTENT_LENGTH, szSizeBuffer, &dwLengthSizeBuffer, NULL); if (bQuery) { dwFileSize = atol(szSizeBuffer); ::InternetCloseHandle(hFileInfo); tmp.Format("Das File %s ist %d Bytes groß", sUrl, dwFileSize); AfxMessageBox(tmp); } else AfxMessageBox("Server unterstützt kein HttpQueryInfo");
inlcudieren muß man die <afxinet.h>
und der Linker braucht die wininet.libJetzt zufrieden ???
MfG veganza
[ Dieser Beitrag wurde am 02.08.2002 um 23:25 Uhr von veganza editiert. ]
-
Original erstellt von veganza:
**
Jetzt zufrieden ???
**Ja, das sieht schon ganz anders aus:D
-
OK
Dann wollen Wir mal hoffen, daß es Frank Gams auch gefällt !!!
Vielleicht wird ja auch ein Mod darauf aufmerksam... und schiebt es in den FAQ...BTW:
Elemente durchsichtig machen
Dieser Thread wäre auch gut für den FAQ (wenn er nicht schon drin ist... bin zu Müde um zu suchen)... nicht nur weil er von MIR istMfG veganza
-
Und was ist bei FTP-Dateien?
MfG PMrogan
-
hab was besseres gefunden, weniger code:
CInternetSession Session; char SrcURL[]="DATEI"; CHttpFile *pHFile = (CHttpFile *)Session.OpenURL(SrcURL); DWORD DLen, DBufLen=sizeof(DLen); if (0 == pHFile->QueryInfo( HTTP_QUERY_FLAG_NUMBER|HTTP_QUERY_CONTENT_LENGTH, &DLen, &DBufLen, NULL)) { printf("Unable to query http file size\n"); exit(1); } int Len = (int)DLen;
@PMrogan
probiere das:CInternetSession isSession("SUE", 1, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, INTERNET_FLAG_DONT_CACHE); CFtpConnection *ftpSession; DWORD dwFileLen; ftpSession = isSession.GetFtpConnection(SUE_SERVER, SUE_UID, SUE_PWD); ftpSession->SetCurrentDirectory(CString(SUE_DIRECTORY) + "/" + sUserDir); CFtpFileFind cFind(ftpSession); cFind.FindFile(sVarFile); cFind.FindNextFile(); dwFileLen = cFind.GetLength();
-
thx
MfG PMrogan