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:

    http://msdn.microsoft.com/library/default.asp?url=/workshop/networking/moniker/reference/functions/urldownloadtofile.asp

    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.



  • @BF_31

    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.lib

    Jetzt 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 ist 😉

    MfG 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


Anmelden zum Antworten