Pobieranie pliku wininet.

0

Witam,

Najpierw może przedstawię mój kod:

[code]
#include <allegro.h>
#include <winalleg.h>
#include <wininet.h>

[...Tutaj jakiś tam kod tworzący okno i wyświetlający napis ....]

HINTERNET hTransfer = NULL;               //Zmienna, Uchwyt Transferu
HINTERNET hSession;                       //Zmienna, Uchwyt Połączenia
HANDLE hFileDownload = NULL;              //Zmienna, Uchwyt utworzenia pliku.
DWORD  dwBytesAvailable = 0;
DWORD  dwRead = 0;                        //Zmienna z iloscią przeczytanych(pobranych) bajtów
char Buffer[4096];                        //Bufor
bool bActive = true, fSuccess = false;

//Ustanawiamy połączenie
hSession = InternetOpen("Updater",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
// Otwieramy transfer
hTransfer = InternetOpenUrl(hSession,"<adres pliku np. dropbox.pl/plik,exe>",NULL,0,0,0);
// Tworzymy plik
hFileDownload = CreateFile("serwer//plik.exe", GENERIC_WRITE, 0,NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
//Rozpoczynamy pobieranie plików
do
{
fSuccess = InternetReadFile(hTransfer, Buffer, 4096,&dwRead); // Pobranie 1 części
if(!fSuccess || dwRead == 0) {
   bActive = false;
   break;
}

// Zapisanie Bufora do pliku.
DWORD dwWritten = 0;
WriteFile(hFileDownload, Buffer, dwRead, &dwWritten, NULL);
dwRead = 0;
}
while(bActive);
//Zamkniecie połączeń.
CloseHandle(hFileDownload);
InternetCloseHandle(hTransfer);[/code]

1.I programik fajnie działa tylko że jak raz pobierze to potem nie dość że plik pobiera się "Od razu" to nawet gdy rozłączę się z internetem to i tak pobiera, domyślam się ze on wtedy po prostu kopiuje plik z plików tymczasowych.Ale ja chcę aby plik za każdym razem pobierał się od nowa z serwera.

2.Drugi problem to taki ze nie wiem jak zrobić postęp, która zmienna przechowuje postęp pobierania ?

3.Chciałbym też zapytać czy da się ten kod jakoś skrócić ?Bo mam do pobrania ~20 plików za każdym razem gdy uruchomie program więc trochę by to było nieestetyczne.

Czekam na pomoc. :)

0

ad1
http://msdn.microsoft.com/en-us/library/windows/desktop/aa385103%28v=vs.85%29.aspx
"Note that caching happens automatically unless the original request to open the data stream set the INTERNET_FLAG_NO_CACHE_WRITE flag."

ad3
Lista z URL-ami + wywołania w pętli, generalnie całą funkcjonalnosc pobierania pliku zamknalbym w jakas funkcje powiedzmy bool GetFileViaHTTP(const std::string &source, const std::string &destination) i pobieral w petli:

for (std::vector<std::string>::iterator i = lista_plikow.begin(); i != lista_plikow.end(); ++i)
     GetFileViaHTTP(lista_plikow[i], "jakies_tam_miejsce_na_dysku");
0

Jeju dzięki :D
Po prostu nie zauważyłem tamtego zdania :D
Skróciłem kod, tamten był skopiowany z jakiegoś forum, teraz napisałem swój (bo zrozumiałem ja działa tamten) i jest ponad 2x mniejszy :D Zaraz ogarnę go do jakiejś funkcji.

Dzięki ci bardzo :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1