..:: Sta₧enφ souboru z internetu ::..

V tomto Φlßnku vßm p°edstavφm funkci, kterß vßm umo₧nφ stßhnout z internetu libovoln² soubor.

Tento hlaviΦkov² soubor je t°eba vlo₧it kv∙li t°φdßm CInternetSession atd.

#include "afxinet.h"

Popis parametr∙ funkce

Prvnφ parametr (url) udßvß adresu souboru kter² chcete stßhnout. PlatnΘ hodnoty jsou:

  • http://farao.czweb.org/web_download.htm
  • C:\test.doc
  • ftp://user:password@ftp.any.com/folder/file.ext
  • atd.
  • Druh² parametr (filename) udßvß kam chcete sta₧en² soubor ulo₧it.

    T°etφ parametr je popis chyby, kter² je vrßcen pokud je sta₧enφ ne·sp∞ÜnΘ, tj. funkce vrßtφ FALSE.

    V²pis funkce

    BOOL getURLFile(const char *url, const char *filename, CString &errorMessage)

    {

    const int FILEBUFLEN = 1024;

    char httpBuff[FILEBUFLEN];

    TCHAR szCause[255];

    errorMessage = "OK"; // Vracen² text s popisem chyby nastavφme na hodnotu OK.

    TRY { // ZaΦßtek bloku kontroly vyjφmek

    CInternetSession session; /* Vytvo°enφm tΘto prom∞nnΘ zahßjφte u₧ivatelskou relaci, tj. propojφte se s internetem. Tuto prom∞nnou potΘ m∙₧ete pou₧φt pro otev°enφ jednoho Φi vφce soubor∙.*/

    session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 1000); // Nastvφme jak dlouho se Φekß na odpov∞∩.

    session.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 3); // Nastavφme poΦet pokus∙ o spojenφ p°i ne·sp∞chu.

    CFile *remoteFile = session.OpenURL(url, 1 , INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD);
    /*
    Otev°eme soubor z internetu. Prvnφ parametr udßvß adresu souboru, druh² je hodnota definovanß aplikacφ. (?) Flagy znamenajφ, ₧e chceme pracovat se souborem jako s binßrnφm a ₧e chceme soubor naΦφst z p∙vodnφho umφst∞nφ, i kdy₧ je ulo₧en v lokßnφ pam∞ti cache.
    */

    CFile localFile(filename, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary); //Otev°eme lokßlnφ soubor do kterΘho se ulo₧φ obsah sta₧enΘho souboru.

    int numBytes;

    while (numBytes = remoteFile->Read(httpBuff, FILEBUFLEN)) // Dokud je co Φφst Φteme

    {

    localFile.Write(httpBuff, numBytes); // Ulo₧it p°eΦtenΘ

    }

    if (remoteFile) delete remoteFile; // Sma₧eme pam∞¥ (a tφm zßrove≥ soubor uzav°eme, v p∙vodnφm zdrojovΘm k≤du toto chyb∞lo, ale podle mn∞ to sem pat°φ)

    } // Konec bloku kontroly vyjφmek

    CATCH_ALL(error) { // ZaΦßtek obsluhy odchycen²ch vyjφmek

    error->GetErrorMessage(szCause,254,NULL); // Zjistφme popis chyby, kterß zp∙sobila vyjφmku

    errorMessage.Format("%s",szCause); // Ulo₧φme popis chyby do nßvratovΘho parametru funkce

    return FALSE; // UkonΦφme funkci s nßvratovou hodnotou FALSE

    }

    END_CATCH_ALL; // Konec obsluhy odchycen²ch vyjφmek

    return TRUE; // Soubor se poda°ilo ·sp∞Ün∞ stßhnout - vrßtφme TRUE

    }

    Doufßm, ₧e se vßm tento zdrojov² k≤d Φetl tak dob°e jako mn∞. R∙znΘ zdrojovΘ k≤dy pro sta₧enφ souboru z internetu jsem vid∞l i d°φve, ale tohle je prvnφ, kter² jsem pochopil na prvnφ p°eΦtenφ. Mo₧nß i proto, ₧e jsem se sna₧il pochopit i ty p°edchozφ.