View Full Version : [c++] ifstream di un file su internet
E' possibile leggere un file da internet con l'ifstream?
C'è una possibilità remota che il dos possa collegarsi a internet?
del tipo ifstream file("http://www.ciao.com/ciao.txt") ?
fermatemi se sto dicendo un'assurdità :D
/\/\@®¢Ø
10-06-2004, 13:14
no, un ifstream non va bene (a meno di non avere un S.O. che permette di vedere nativamente indirizzi web come percorsi nel file system).
Ci sono pero' delle librerie che permettono di ottenere un generico per un socket e probabilmente pure per una sessione http. Prova a controllare con google.
Originariamente inviato da /\/\@®¢Ø
Ci sono pero' delle librerie che permettono di ottenere un generico per un socket e probabilmente pure per una sessione http.che cos'è un generico per un socket ma soprattutto cos'è un socket?
Prova a controllare con google. non ho ben chiaro cosa devo cercare...
se fosse in windows sarebbe più semplice o lo stesso?
Lo stesso... Ma il tuo preblema è fare una sessine HTTP ? Su Windows trasferire un file HTTP è facilissimo con la API giusta...
in realtà devo farlo semplicemente leggere dal programma (cioè senza che io possa vedere dove l'ha preso)
cmq se non si può in dos o è troppo complicato lascio perdere, non è strettamente necessario ;)
Con le API InternetOpen, InternetOpenUrl, InternetReadFile e InternetCloseHandle fai un batter d'occhio...
non sono api per windows? il mio prog è in dos :rolleyes:
Dos o console di testo ? Se è un programma a 32 bit per la console di testo puoi usare le API...
Originariamente inviato da cionci
Dos o console di testo ? Se è un programma a 32 bit per la console di testo puoi usare le API...
che differenza c'è fra i due? e in quale caso posso usarlo? :)
Allora non fai programmi in DOS, ma li fai per Windows, anche se sono in testo... Quindi puoi tranquillamente usare quelle API... Vai su http://msdn.microsoft.com per cercare la documentazione di quelle API...
bof nn capisco cosa ha di sbagliato sto codice... mi dà un po' di errori
devo dire che non ho mai usato api o handle vari, soprattutto integrati in un file per console di testo
#include <iostream>
HINTERNET hFile, hNet;
DWORD dwBytesRead = 0;
char buffer[10*1024];
BOOL bRead;
hNet = InternetOpen(
"Microsoft Internet Explorer",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
0
);
if (hNet == NULL)
{
cout<<"Devi connetterti a internet"<<endl;
return 0;
}
hFile = InternetOpenUrl(
hNet,
"http://xmax.altervista.org/tictac.txt",
NULL,
0,
INTERNET_FLAG_RELOAD,
0
);
if (hFile == NULL)
{
cout<<"Non ho trovato il file, chiudo"<<endl;
return 0;
}
bRead = InternetReadFile(
hFile,
buffer,
sizeof(buffer),
&dwBytesRead
);
if (bRead == TRUE)
{
cout<<"File ricevuto, elaboro le domande";
................
}
else
{
cout<<"File vuoto, riprova";
return 0;
}
InternetCloseHandle(hNet);
InternetCloseHandle(hFile);
posso usare il file che ha letto (il buffer?) in un ifstream?
Devi includer windows.h e Wininet.h...poi devi linkare al tuo eseguibile libwininet.a ;)
ahhhhhhhhhhhh mi fa venire il mal di testa
mi dice che sto traformando il void* di HINTERNET hNet in int :confused: :confused: :confused: e così anche per gli altri handle
mi fai vedere un esempio veloce veloce? non ho trovato esempi e nn ci sto capendo niente
Il tuo codice dovrebbe andre bene... Nnon so il perchè di questi errori...
Guarda...non ho messo mano al codice e funziona perfettamente ;)
#include <iostream>
#include <windows.h>
#include <wininet.h>
using namespace std;
int main()
{
HINTERNET hFile, hNet;
DWORD dwBytesRead = 0;
char buffer[10*1024];
BOOL bRead;
hNet = InternetOpen(
"Microsoft Internet Explorer",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
0
);
if (hNet == NULL)
{
cout<<"Devi connetterti a internet"<<endl;
return 0;
}
hFile = InternetOpenUrl(
hNet,
"http://forum.hwupgrade.it/images/smilies/icon_wink.gif",
NULL,
0,
INTERNET_FLAG_RELOAD,
0
);
if (hFile == NULL)
{
cout<<"Non ho trovato il file, chiudo"<<endl;
return 0;
}
bRead = InternetReadFile(
hFile,
buffer,
sizeof(buffer),
&dwBytesRead
);
if (bRead == TRUE)
{
cout<<"File ricevuto, elaboro le domande";
}
else
{
cout<<"File vuoto, riprova";
return 0;
}
InternetCloseHandle(hNet);
InternetCloseHandle(hFile);
return 1;
}
te lo compila? a me dà errore
[Linker error] undefined reference to `InternetOpenA@20'
[Linker error] undefined reference to `InternetOpenUrlA@24'
[Linker error] undefined reference to `InternetReadFile@16'
[Linker error] undefined reference to `InternetCloseHandle@4'
[Linker error] undefined reference to `InternetCloseHandle@4'
questo è il log completo degli errori
C:\WINDOWS\TEMP/ccs2obeb.o(.text+0x119):connessione internet.cpp: undefined reference to `InternetOpenA@20'
C:\WINDOWS\TEMP/ccs2obeb.o(.text+0x175):connessione internet.cpp: undefined reference to `InternetOpenUrlA@24'
C:\WINDOWS\TEMP/ccs2obeb.o(.text+0x1ce):connessione internet.cpp: undefined reference to `InternetReadFile@16'
C:\WINDOWS\TEMP/ccs2obeb.o(.text+0x220):connessione internet.cpp: undefined reference to `InternetCloseHandle@4'
C:\WINDOWS\TEMP/ccs2obeb.o(.text+0x22e):connessione internet.cpp: undefined reference to `InternetCloseHandle@4'
eppure l'ho copiato pari pari al tuo, il wininet.h c'è...
è come se nn vedesse il file che gli ho detto di includere :boh:
il bello è che se gli dò altri errori del tipo tolgo using namespace std non li trova sti benedetti errori di linker! che sia il compilatore?
using namespace std lo devi usare, altrimenti non ti trova cout !!!
Devi linkare libwininet.a dalle opzioni del linker...
:D :D :D
ok ora ho un buffer, che però non essendo un file non posso usare ifstream
dovrei separare ogni riga che corrisponde ad una domanda, e poi fare il random di ste domande e scrivere la domanda a schermo
forse è meglio scaricare il file? però poi devo cancellarlo!
ps: cionci for president! :) grazie mille! ;)
Usa la classe stringstream...
Metti il terminatore di stringa ('\0') nel buffer alla posizione che corrisponde alla lunghezza della stringa...
stringstream s;
s << buffer;
Ed ora ti fa la scansione linea per linea con getline...
string linea;
getline(s, linea);
ok perfetto, sono riuscito a fare proprio quello che volevo. :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.