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"
Prvnφ parametr (url) udßvß adresu souboru kter² chcete stßhnout. PlatnΘ hodnoty jsou:
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.
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φ.