Ako stiahnuť súbor z WinApi C++ programu? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ako stiahnuť súbor z WinApi C++ programu? – C / C++ – Fórum – Programujte.comAko stiahnuť súbor z WinApi C++ programu? – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
iridium0
Newbie
10. 3. 2018   #1
-
0
-

Zdravím.

 Prosím o radu, akú WinaApi funkciu (alebo funkcie) mám použiť, keď chcem stiahnuť z internetu textový súbor. Vo svojom programe totiž pracujem s databázou, ktorú treba občas aktualizovať (napr. stlačením tlačítka). Najlepšie by bolo, keby stlačením toho tlačítka nevyskakovali žiadne dialógové okná vyzývajúce užívateľa kam súbor uložiť a či chce existujúci nahradiť, ale rovno by išiel na určené miesto, kde existujúci súbor nahradí. (Konkrétne do toho priečinka, kde je program.)

Za odpovede vopred ďakujem.

Nahlásit jako SPAM
IP: 84.47.51.–
Radek Chalupa
~ Redaktor
+1
Super člen
10. 3. 2018   #2
-
0
-

#1 iridium
Jedna možnost: funkce URLDownloadToFile (takhle z hlavy si nejsem jistý zda tahle funkce nejprve nepoužije cache, tj. pokud jde o stejný soubor a url, tak ten starý nepřepíše)

Drujá možnost: InternetOpen - InternetOpenUrl (použít flagy INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_RELOAD) - InternetReadFile -  InternetCloseHandle.

Radek Chalupa
- individuální konzultace, školení programování, (C/C++, C#, WinAPI, .NET, COM, ATL, MFC...)
- vývoj software na zakázku
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
iridium0
Newbie
10. 3. 2018   #3
-
0
-

#2 Radek Chalupa
Funguje to. Díky. Načítava obsah súboru z int. odkazu do bufra. Jediný problém je, že medzi každý znak mi vkladá čiarku - a ešte snáď to, že do funkcie InternetReadFile() treba zadávať počet bajtov. Bolo by ideálne, keby sa táto dĺžka dala nejako zistiť ešte pred samotným volaním funkcie InternetReadFile() a pred alokáciou pamäte bufra.

Nahlásit jako SPAM
IP: 84.47.51.–
iridium0
Newbie
10. 3. 2018   #4
-
0
-

#3 iridium
Ok. Problém s čiarkou vyriešený (mal som tam chybu ja).

Nahlásit jako SPAM
IP: 84.47.51.–
Řešení
Radek Chalupa
~ Redaktor
+1
Super člen
11. 3. 2018   #5
-
0
-
Vyřešeno Nejlepší odpověď

#3 iridium
Délku můžeš zjistit pomocí HttpQuetyInfo nějak takhle:

 

wchar_t sz_velikost[25];
DWORD dw_velikost = sizeof(sz_velikost);
HttpQueryInfo(h_url, HTTP_QUERY_CONTENT_LENGTH, sz_velikost, &dw_velikost, NULL);
dw_velikost = (DWORD)_wtoi(sz_velikost);

Pokud předpokládáš významně velké "soubory", tak je lepší číst v cyklu do nějakého pevného bufferu, třeba BYTE buffer[1000]; a cyklus ukončit když InternetReadFile vrátí 0, resp. když vrácený počet načtených bytů (4. parametr) je menší než požadovaný počet, jsi na konci a do výstupu nepřidáš celých 1000byte ale jen těch skutečně načtených.

Radek Chalupa
- individuální konzultace, školení programování, (C/C++, C#, WinAPI, .NET, COM, ATL, MFC...)
- vývoj software na zakázku
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
iridium0
Newbie
13. 3. 2018   #6
-
0
-

#5 Radek Chalupa
Dík za radu. To s tým cyklickým čítaním je fakt dobrý nápad. (Funkciu HttpQueryInfo() som skúšal, ale mi to akosi nefungovalo.)

Nahlásit jako SPAM
IP: 62.197.243.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 67 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý