PDA

View Full Version : [C++]Scaricare files da usare nel programma


yssj485
17-11-2005, 00:57
Ciao a tutti!

Vorrei fare in modo che dato un indirizzo di un file di un sito, il mio programma lo vada a scaricare per poi effettuare le operazioni di cui ho bisogno...

bhe come faccio? qualche funzione di wxwidgets utile?

grazie! :)

:muro:

cionci
17-11-2005, 15:38
Puoi usare questo se è un file HTTP:
http://www.wxwidgets.org/manuals/2.6.2/wx_wxhttp.html#wxhttp

Qu@ker
17-11-2005, 17:10
#include <wx/wx.h>
#include <wx/wfstream.h>
#include <wx/protocol/ftp.h>

class
downloadapp : public wxApp
{
public:
virtual bool OnInit();
};

IMPLEMENT_APP(downloadapp)

bool
downloadapp::OnInit()
{
wxFTP ftp;

if ( !ftp.Connect(_("biolpc22.york.ac.uk")) ) {
wxLogError(_("Couldn't connect"));
return false;
}
ftp.ChDir(_("/pub/2.6.2/"));
wxInputStream *in = ftp.GetInputStream(_("wxWidgets-2.6.2-HTML.zip"));
if ( !in ) {
wxLogError(_("Couldn't get file"));
} else {
wxFileOutputStream out(_("wxWidgets-2.6.2-HTML.zip"));
if ( out.Ok() ) {
in->Read(out);
} else {
wxLogError(_("Couldn't open output file"));
}
delete in;
}

return false;
}

yssj485
17-11-2005, 17:31
grazie ragazzi, darò un'occhiata ad entrambi
:)

yssj485
18-11-2005, 00:39
il frammento di codice di Qu@ker salva anche il file nella cartella del programma giusto?

ah si provato e lo fa ;)

yssj485
19-11-2005, 01:45
altra piccola domanda più o meno legata a internet..

è possibile fare aprire il browser predefinito cliccando su un url in un wxTextCtrl?
al momento ho notato lo window style wx_Auto_URL nel wxtextctrl ma cliccando sull'url nel runtime non sembra fare nulla quindi immagino che crei solo un evento a cui dovrei collegare una funzione.. giusto?


grazie

Qu@ker
19-11-2005, 13:24
Esatto. A occhio ti sarebbe utile wxLaunchDefaultBrowser()...

yssj485
19-11-2005, 13:38
si avevo appena visto quella funzione.. ma il problema che ho è.. dove prendo la stringa, da dare a LaunchDefaultBrowser, corrispondente all'Url evidenziata dal wxAUTO_URL?

Qu@ker
19-11-2005, 15:09
Se dai un'occhiata ai samples, nell'esempio text mostrano come gestire l'evento wxTextUrlEvent.

yssj485
19-11-2005, 15:28
stavo guardando proprio quello, e avevo pensato di modificare un attimo il sample per vedere se mi apriva la pagina...
però a meno che non hofatto qualche errore, non me l'apre

void MyTextCtrl::OnTextURL(wxTextUrlEvent& event)
{
const wxMouseEvent& ev = event.GetMouseEvent();

// filter out mouse moves, too many of them
if ( ev.Moving() )
return;

long start = event.GetURLStart(),
end = event.GetURLEnd();

wxString auto_url = GetValue().Mid(start, end - start).c_str(),


wxLaunchDefaultBrowser( auto_url);

}



io avevo modificato come sopra aggiungendo la libreria di wxLaunchDefaultBrowser

Qu@ker
19-11-2005, 16:09
Se io lo cambio cosi' l'originale in text:

void MyTextCtrl::OnTextURL(wxTextUrlEvent& event)
{
const wxMouseEvent& ev = event.GetMouseEvent();

// considero solo la pressione del tasto sinistro
if ( !ev.LeftDown() )
return;

long start = event.GetURLStart(),
end = event.GetURLEnd();

wxString miaUrl = GetValue().Mid(start, end-start);
::wxLaunchDefaultBrowser(miaUrl);
}

Il risultato e' che sulla logwindow appare:

This is the log window.
04:09:28 PM: Error: No default application can open .html extension

Che mi pare vada abbastanza bene... :D

yssj485
19-11-2005, 16:18
ottimo invece così me l'ha aperta :D

mi pare di aver capito che questa funzione funzioni solo su windows e non funziona con firefox.. forse rientri nei due casi..

Qu@ker
19-11-2005, 16:27
No, io sono sotto Linux e uso le wxGTK. Significa solo che dovrei configurare da qualche parte l'associazione tra i file .html e Firefox.
Ma la cosa al momento non mi interessa affatto... :D

yssj485
19-11-2005, 16:28
ok grazie cmq ;)

yssj485
19-11-2005, 19:23
il bello è che adesso non so perchè non mi funziona sul programma mio.. :muro: :doh:

yssj485
19-11-2005, 21:00
adesso sono riuscito a capire l'errore che facevo.. ma ho il problema che mi apre al click sull'url 2 pagine di Internet.. una, la prima totalmente vuota anchesenza indirizzo, e l'altra invece con l'indirizzo corretto..

bho

edit: sistemato :)